Les extensions de langage perdues du compilateur High C de MetaWare
Les compilateurs C des années 1980
- Dans les années 1980, de nombreuses petites entreprises se faisaient concurrence en proposant diverses extensions du langage
- Phar Lap a développé une extension DOS permettant d’exploiter le processeur 80386 32 bits, et MetaWare a porté le compilateur High C pour cela
- Fujitsu a intégré l’extension DOS de Phar Lap à la plateforme FM TOWNS, et High C est devenu le compilateur C par défaut de cette plateforme
Les extensions de langage uniques de High C
- High C incluait non seulement des extensions spécifiques à DOS, mais aussi une grande variété d’extensions de langage pensées pour les utilisateurs
- Certaines fonctionnalités n’ont été intégrées aux standards officiels que plusieurs décennies plus tard, et d’autres n’existent toujours ni en C ni en C++
Utilisation du caractère de soulignement dans les littéraux numériques
- Il était possible d’utiliser des caractères de soulignement pour séparer les longs littéraux numériques et les rendre plus lisibles
- Le C++ a introduit cette fonctionnalité dans C++14, et le C dans C23
Arguments étiquetés
- Il était possible d’étiqueter les arguments lors des appels de fonction comportant de nombreux paramètres
- Cela ressemble à une fonctionnalité populaire de Python, et lorsqu’il y a des étiquettes d’arguments, on peut spécifier les paramètres indépendamment de leur ordre
- Le C et le C++ standards ne disposent toujours pas de cette fonctionnalité
Intervalles dans les case
- Une fonctionnalité permettait de faire correspondre une plage de valeurs, comme en Pascal
- Le C et le C++ standards ne disposent pas de cette fonctionnalité
Fonctions imbriquées
- Il était possible de déclarer une fonction imbriquée à l’intérieur d’une autre fonction
- Les fonctions imbriquées pouvaient être déclarées avec le type de « valeur de fonction complète », qui se comporte comme une closure non échappante
- Cela offrait une implémentation plus complète que l’extension de fonctions imbriquées de GCC
- Le C standard ne possède toujours pas de fonctionnalité officielle de fonctions imbriquées
Générateurs
- Prise en charge de générateurs coroutine de style Python
- Une fonction génératrice pouvait produire plusieurs valeurs, et une nouvelle syntaxe de boucle
for permettait de traiter chaque valeur séquentiellement
- Cela autorisait des interactions complexes avec la fonctionnalité de fonctions imbriquées
- Il est peu probable que le C standard intègre cette fonctionnalité
Résumé de GN⁺
- Le compilateur High C de MetaWare proposait diverses extensions de langage dans les années 1980, améliorant fortement l’expressivité du langage C
- Certaines fonctionnalités n’ont été intégrées aux standards officiels que plusieurs décennies plus tard, tandis que d’autres n’existent toujours ni en C ni en C++
- Des fonctionnalités avancées comme les générateurs et les fonctions imbriquées restent difficiles à trouver même dans de nombreux langages de programmation actuels
- Cet article aide à comprendre l’histoire et l’évolution du langage C et offre un éclairage intéressant sur la conception des langages de programmation
1 commentaires
Commentaires sur Hacker News
En 2011, quelqu’un a écrit un
forpiloté par itérateur, en imaginant qu’il pourrait un jour être inclus dans le standard C++Quelqu’un possède le High C/C++ Language Reference
Fonctionnalités disponibles dans le langage D (ou Das BetterC) :
caseLe compilateur C
lcc-wina ajouté la surcharge d’opérateurs, les arguments de fonction par défaut et la surcharge de fonctionsLe compilateur C de Plan 9 a introduit plusieurs extensions du langage, dont certaines ont été intégrées au standard C
Aujourd’hui, GCC prend en charge le drapeau
-fplan9-extensions, qui permet notamment la conversion automatique de pointeurs de structures vers des champs anonymesLa personne qui a introduit ces fonctionnalités était très en avance sur son temps, mais il est regrettable qu’elles n’aient pas influencé le standard
Le sujet avait déjà été abordé auparavant sur Hacker News
Quelqu’un se demande s’il existe une copie PDF
Si les littéraux de chaîne dans l’exemple de code se terminent par
¥nau lieu de\n, c’est à cause de la page de code Shift-JISLes générateurs rappellent à certains la question des itérateurs internes/externes de Rust ainsi que
try_fold()La typographie du livre paraît à la fois magnifique et affreuse
Sans bien connaître les conventions d’écriture japonaises ni les règles de crénage, cela donne l’impression qu’une police à largeur variable a été forcée à entrer dans une grille à chasse fixe
Il est apprécié que les exemples de code ne soient pas en police 8 pt
Quelqu’un se demande si le livre a été écrit en japonais, ou rédigé en anglais puis traduit en japonais
S’il vient de Fujitsu, il est probable qu’il ait été écrit en japonais. La qualité de l’anglais des instructions
printfet des commentaires de code, malgré un auteur non natif, est jugée impressionnanteLes fonctionnalités liées aux générateurs, en particulier, étaient extrêmement en avance pour l’époque
C’est peut-être justement parce que Fujitsu n’est pas passé par un processus de normalisation. Mais c’est aussi pour cela que ces extensions sont aujourd’hui redécouvertes et réinventées dans le C/C++ moderne