• [^] # Re: Hum...

    Posté par (site web personnel, Mastodon) . En réponse au journal Vous avez dit "caractère" ?. Évalué à 10. Dernière modification le 05 septembre 2022 à 13:58.

    Cette réponse donne l'occasion de faire encore un peu d'archéologie (ou plutôt juste de l'histoire vu que c'est encore en usage) :)

    Les 7 bits m'ont surpris, car ce n'est pas dans nos habituelles puissances de 2. Mais en fait, ASCII fait partie d'une époque où la mémoire et les disques étaient vraiment très cher et il valait donc vraiment mieux ne pas être trop gourmand.

    As-tu lu le lien que tu pointes? Ça parle d'autres choses, comme le fait que 6 bits étaient un peu juste (pas de minuscules et beaucoup de code de contrôle) et 8 bits était pas vu comme utile pour les américains qui se foutaient du reste du monde, et surtout pas mal de monde trouvait plus utile d'utiliser le 8ème bit pour d'autres choses suivant le besoin (contrôle de parité par exemple) et du coup par exemple les serveurs mails le filtrait.

    En fait, on a utilisé 5 bits pendant longtemps, notamment dans les codes télégraphiques comme Beaudot (ITA1) dès les années 1870
    An early version from Baudot's 1888 US patent
    (Je remonte jusqu'au télégraphe parce-que les téléscripteurs ont été utilisé avec les premiers ordinateurs)
    On pourrait citer aussi le code Bacon de 1605 si on veut remonter plus loin.

    En 1901, une autre variante, Muray (ITA2) est actée et standardise certains caractères de contrôle (CR et LF mais aussi Del et Bell)
    British variant of ITA2
    (c'est elle qui sera utilisée avec les premières cartes perforées, sur les Linotype et une bonne partie de l'informatique à l'époque)

    On note que jusque là on ne distingue pas la casse, tradition qu'on retrouve dans certains systèmes (par exemple VMS dont descendent CPM et DOS) et langages (BASIC). Le passage à 6 bits va permettre d'avoir, dès fin 1950 avec FIELDATA et EBCDIC d'avoir les chiffres et divers symboles ou d'autres caractères de contrôle sur certains systèmes (UNIVAC, SDS, mainframes IBM)
    Military code and UNIVAC graphical code

    En arrivant entre 1961 et 1963, US-ASCII n'était que dans la même continuité et a eu besoin de 7 bits pour caser un peu plus de symboles et encore plus de caractères de contrôles qui vont être standardisées du coup. bien qu'ayant essayé de rester compatibles avec les existants (notamment EBCDIC pour les glyphes et les contrôles possibles), il y a eu une réorganisation interne pour faciliter l'utilisation...
    ASCII chart from a pre-1972 printer manual

    Il eut été possible d'utiliser 6 bits avec un caractère de contrôle pour dire qu'on bascule en minuscules (c'était une pratique courante), mais il a été jugé plus simple d'avoir un bit spécifique pour les minuscules (bascule shift) et un autre pour les trente-deux codes de contrôle, d'où le total de 7 (résumé de ma traduction du passage suivant)
    « The committee debated the possibility of a shift function (like in ITA2), which would allow more than 64 codes to be represented by a six-bit code. In a shifted code, some character codes determine choices between options for the following character codes. It allows compact encoding, but is less reliable for data transmission, as an error in transmitting the shift code typically makes a long part of the transmission unreadable. The standards committee decided against shifting, and so ASCII required at least a seven-bit code. »

    Maintenant, il ne faut pas oublier que les deux premières lettres de ASCII veulent dire American Standard : ils avaient besoin de standardiser les choses pour leur petit continent... Ce n'est pas qu'ils en avaient rien à foutre du reste du monde mais c'était vraiment anecdotique vu le vaste marché intérieur.
    Ainsi, Eric N. Fischer nous apprend que la firme de Baudot a prévu d'utiliser 6 bits (c'est juste non standardisés) pour les codes de contrôle ou d'autres alphabets. Le même principe est repris par EBCDIC avec les pages de code puis avec le 8ème bit de l'ASCII étendu...

    Corrigez-moi si je me trompe mais il ne me semble pas avoir lu que les développeurs "optimisaient" à l'époque en stockant 8 caractères sur 7 octets mais stockaient sur 8 octets, en tous cas je ne connais aucun format de stockage faisant ça.

    Effectivement, ce n'était pas le cas pour le stockage sur disque... Peut-être qu'avec des cartes perforées, faut que je vérifie. Par contre, le standard est sur 7 bits car pensé pour faire des transmissions télégraphiques (donc pas que pour l'informatique) tout en restant compatible avec le stockage d'octets ; c'est ainsi que je comprends le passage suivant
    « The committee considered an eight-bit code, since eight bits (octets) would allow two four-bit patterns to efficiently encode two digits with binary-coded decimal. However, it would require all data transmission to send eight bits when seven could suffice. The committee voted to use a seven-bit code to minimize costs associated with data transmission. Since perforated tape at the time could record eight bits in one position, it also allowed for a parity bit for error checking if desired. Eight-bit machines (with octets as the native data type) that did not use parity checking typically set the eighth bit to 0. » associé à cet autre passage
    « ASCII was first used commercially during 1963 as a seven-bit teleprinter code for American Telephone & Telegraph's TWX (TeletypeWriter eXchange) network. TWX originally used the earlier five-bit ITA2, which was also used by the competing Telex teleprinter system. Bob Bemer introduced features such as the escape sequence. His British colleague Hugh McGregor Ross helped to popularize this work – according to Bemer, "so much so that the code that was to become ASCII was first called the Bemer–Ross Code in Europe". Because of his extensive work on ASCII, Bemer has been called "the father of ASCII". »

    Alors certes aujourd'hui il ne faut pas utiliser wchar_t mais garder en mémoire qu'avant on ne savait pas que ça irait dans une autre direction, avec UTF-8 partout pour le stockage (en acceptant une perte de stockage pour les chinois, l'histoire aurait pu dire que UTF-16 était mieux pour optimiser l'espace), plus de 16 bits et des caractères Unicode de transformation.

    Exactement. C'est aussi ce qui est dit de l'ASCII étendu

    « Eventually, as 8-, 16-, and 32-bit (and later 64-bit) computers began to replace 12-, 18-, and 36-bit computers as the norm, it became common to use an 8-bit byte to store each character in memory, providing an opportunity for extended, 8-bit relatives of ASCII. In most cases these developed as true extensions of ASCII, leaving the original character-mapping intact, but adding additional character definitions after the first 128 (i.e., 7-bit) characters. »
    (et du coup je n'ai pas compris pourquoi le moinssage)

    "It is seldom that liberty of any kind is lost all at once." ― David Hume