D'où et quand est née la convention `0x` pour les littéraux hexadécimaux?

Aug 16 2020

Au début des années 1980, C utilisait 0xcomme préfixe pour indiquer des littéraux entiers exprimés en hexadécimal, par exemple 0xCAFE. Cela n'existait pas dans B à partir de 1972, bien que B prenne en charge les littéraux d'entiers octaux via un 0préfixe.

Où et quand ce 0xpréfixe a-t-il été utilisé pour la première fois?

Réponses

36 Raffzahn Aug 16 2020 at 13:28

Cela n'existait pas dans B à partir de 1972, bien que B prenne en charge les littéraux d'entiers octaux via un préfixe 0.

C'est vrai, mais le prédécesseur de B, BCPL, avait une notation #pour octal et #xpour hexadécimal. L'idée a donc «sauté» d'une génération.


L'histoire de C est celle de la suppression de fonctionnalités à ajouter plus tard à nouveau ... pour le meilleur ou pour le pire.

  • CPL (Combined Programming Language) a été développé à Cambridge et à Londres en tant qu'Algol simplifié pour la programmation système (* 1). Il a été implémenté en 1965/66 pour l'EDSAC 2, l'Atlas et l'IBM 7094.

  • BCPL (Basic CPL) était, comme son nom l'indique, une version simplifiée de CPL, d'abord implémentée en 1967 sur un IBM 7094 (* 2).

  • B était à nouveau un BCPL simplifié (* 3, * 4), conçu pour s'adapter au PDP-7 en 1969.

  • C a été développé via NB (New B) pour le PDP-11 en 1972ff, ajoutant (retour) des fonctionnalités.

CPL utilisé #pour désigner les constantes octales. Il n'y avait pas vraiment besoin d'hexagone, car toutes les machines pour lesquelles il était implémenté avaient des tailles de mot divisibles par 3 et utilisaient des caractères de 6 bits pour la sortie.

BCPL a évolué sur un temps (assez court). Alors que depuis le début #était utilisé pour marquer un nombre octal, il a été bientôt complété par #bfor binary #xpour hexadécimal et même #opour octal. Ces ajouts étaient spécifiques au temps et à la mise en œuvre, mais au moins sont #xdevenus rapidement une norme.

B a de #xnouveau abandonné avec la #notation entière (* 5) en faveur d'un zéro précédent, simplifiant l'analyseur. Puisque le PDP-7 était un multiple de la taille de la machine à 3 mots, octal était la seule notation spécifique à la machine nécessaire (* 6,7).

C à son tour a été développé pour le PDP-11, pour lequel, en tant que machine 16 bits, de nombreuses constantes dépendantes de la machine viennent naturellement en hexadécimal - sans parler de l'octet 8 bits et de la segmentation de l'ASCII en groupes de 32. La réintroduction d'une notation hexadécimale a été envisagée utile - juste cette fois en restant avec l'idée d'un zéro précédent.


* 1 - CPL vaut vraiment le coup d'œil. Bien qu'il possède déjà de nombreuses bases de C, comme des pointeurs vers des mots comme élément de base, il contient également plusieurs fonctionnalités qui semblent assez peu conventionnelles à partir d'aujourd'hui. Par exemple, a = bcn'affecte pas la variable bc à a, mais le produit de b fois c. Les identifiants à plusieurs caractères devaient commencer par des majuscules. Cela pourrait aussi bien être à l'origine de l'étui de chameau très apprécié.

* 2 - Et un modèle 35 TTY, qui, à ce moment-là, n'avait pas d'accolades ou carrées, ainsi des digraphes ont été ajoutés. Pas de barre oblique inverse, donc *utilisé pour les caractères spéciaux dans les chaînes.

* 3 - Plus quelques commutateurs amusants. Avait Algol +:=comme affectation augmentée, donc utilisé CPL et BCPL =+, tandis que B est revenu à +=.

* 4 - Peut-être quelques PL / j'ai ajouté.

* 5 - Il a également chuté #dans le cadre des opérateurs de comparaison

* 6 - Il convient toujours de garder à l'esprit que l'octet 8 bits et la notation hexadécimale correspondante n'ont été introduits que peu de temps auparavant avec l'IBM / 360.

* 7 - Une remarque intéressante peut être que CTC a également utilisé un zéro précédent pour les constantes octales dans leur assembleur pour le Datapoint 2200 de 1970 . Donc, même si je ne connais pas de relation directe, il est assez intéressant qu'ils aient proposé la même solution en même temps que Thompson.