Maison > Article > développement back-end > Histoire de C et C . Première partie : émergence et standardisation du langage C. C avec Classes devient C
C et C sont des langages emblématiques dans lesquels une énorme quantité de code est écrite. Quel chemin ont-ils parcouru pour le devenir ? Cet article couvre l'émergence du C et le début de sa standardisation officielle. Vous découvrirez également le C avec Classes et son éventuelle transformation en C .
1969. Apollo 11 visite la Lune. AT&T Bell Labs développe un langage que nous connaissons tous aujourd'hui sous le nom de C. À l'heure actuelle, un système d'exploitation Unix en est aux premiers stades de développement.
En fait, le langage C a repris les principales fonctionnalités du langage B. Ainsi que l'origine de son nom. Quant à Unix, il était initialement implémenté en langage assembleur et ne disposait même pas d'un compilateur pour les langages de haut niveau. Le développement de ce projet est dû à l'une des raisons de la création du langage C.
En 1971, le compilateur et certains utilitaires en C sont inclus dans la deuxième version d'Unix. Et en 1973, le noyau Unix était en grande partie écrit en C.
Dennis Ritchie et Brian Kernighan ont publié la première édition de "The C Programming Language" le 22 février 1978. Ce livre a été le premier document largement disponible sur le langage C.
Figure N1 - Couverture de la première édition du livre "C Programming Language"
Il est devenu un standard pour le développement en C depuis sa publication jusqu'à la première certification de langue officielle. Le « standard » s'appelait K&R, d'après les premières lettres des noms de famille des auteurs.
Ce livre a présenté le programme "Hello World" comme exemple de programme de travail minimal. Après 1978, presque tous les livres sur les langages de programmation ne pouvaient plus se passer de cet exemple de code. Aujourd’hui, afficher « Hello World » comme premier programme est une tradition bien ancrée.
#include <stdio.h> main() { printf("Hello, World\n"); }
K&R a présenté plusieurs fonctionnalités linguistiques. Par exemple, les structures : un ensemble de plusieurs variables regroupées sous un seul nom pour faciliter la référence, ainsi que les types de données long int et unsigned int.
Les opérateurs d'addition/soustraction avec affectation ont également changé dans K&R C. Auparavant, pour augmenter une valeur de un, il fallait écrire a = 1, mais ces opérateurs confondaient le compilateur C. D'ailleurs, la différence entre a = 1 (augmentation de un) et a = 1 (affectation) paraissait plutôt fragile du point de vue humain. C'est dans K&R C que ces opérateurs sont devenus familiers : a = 1.
Les exemples de code du livre ont été conçus dans un style uniforme, qui porte également le nom des premières lettres des noms de famille des créateurs. Le style K&R se distingue par l'utilisation de huit espaces comme indentation principale (bien que quatre espaces soient plus couramment utilisés). On l'appelle aussi le « style du noyau », car le noyau Unix est écrit dans ce style.
#include <stdio.h> main() { printf("Hello, World\n"); }
En mai 1979, Bjarne Stroustrup, employé des Bell Labs, a commencé à développer un système qui devait être le premier cluster Unix. En d’autres termes, il a commencé à créer un système informatique distribué connecté à un réseau commun de plusieurs ordinateurs.
Le problème était le manque de boîte à outils adaptée pour cela. Parmi les langages de programmation existants, il existait deux options qui pourraient aider à résoudre ce problème, mais toutes deux présentaient des nuances. Le langage BCPL était rapide mais inadapté aux grands projets car assez proche des langages de bas niveau. Le langage de programmation orienté objet Simula, en revanche, convenait à cette tâche mais était assez lent. Stroustrup a donc décidé d'implémenter son propre langage basé sur C.
Dès octobre 1979, le préprocesseur CPRE, ajoutant des classes, au C était prêt. Le langage s'appelait C avec Classes. On pourrait écrire le code du programme et le transmettre au préprocesseur. Cependant, il était toujours considéré comme une extension de C.
En plus des classes, la première version de C avec Classes incluait :
La langue gagnait en popularité :
Mais même avec cette popularité, C n’avait que le niveau tacite de K&R. Les développeurs des compilateurs introduisaient de nombreuses modifications non standard dans le langage. C’est à ce moment-là que le problème de la portabilité du code a commencé à se poser. Le premier standard C a commencé à émerger face à cet éventail de problèmes.
En 1983, l'American National Standards Institute (ANSI) a formé un comité pour rédiger la spécification. Le processus de normalisation n'a pris fin qu'en 1989, lorsque la première norme du langage a été ratifiée sous le nom de « ANSI X3.159-1989 : Langage de programmation C ». La même année, la deuxième édition du livre « The C Programming Language » est publiée, décrivant le langage tel qu'il apparaît dans la norme. En un an, cette norme a été approuvée par l'Organisation internationale de normalisation (ISO) avec des modifications mineures.
Figure N2 - Couverture de la deuxième édition du livre "C Programming Language"
En plus d'un revers de modifications apportées au langage depuis K&R, la norme incluait des fonctionnalités entièrement nouvelles, telles que des prototypes de fonctions et un préprocesseur plus sophistiqué. La norme comprenait également une description de la composition de la bibliothèque standard. De plus, certains moyens qui n'avaient pas été définis auparavant ont reçu des définitions plus précises.
En 1982, Bjarne Stroustrup a commencé à travailler sur des changements qui feraient sortir C with Classes de l'État, ce que son créateur a qualifié de « succès moyen ». À partir de ce moment, il a fallu un an pour développer un compilateur. Cfront est sorti en 1983.
Sa principale caractéristique était qu'il convertissait le C avec des classes en code C. Après cela, le code converti a été transmis au compilateur C. Cette fonctionnalité a permis à davantage de personnes d'utiliser le compilateur, ainsi que de l'utiliser sur une infrastructure Unix existante.
Au fur et à mesure que la langue évoluait, son nom a changé plusieurs fois. Il s'appelait d'abord C84 parce que la communauté l'appelait simplement C. Cependant, le nom était également trompeur, car il ressemblait plus à un nouveau standard C qu'à un sous-ensemble du langage. Et cela n’a pas vraiment aidé à résoudre le problème du nom précédent. Finalement, le langage est devenu connu sous le nom de C , c'est-à-dire C et l'opérateur d'incrémentation.
Lors du passage du C avec classes au C , d'autres nouveautés sont apparues dans le langage :
Le style de commentaire, encore utilisé aujourd'hui, a pris racine à ce stade même du développement du langage. Le style est également utilisé dans d'autres langues.
C'est ainsi que vivait C avant la certification officielle. Stroustrup a répondu assez rapidement aux demandes de la communauté des programmeurs. Il publiait des ouvrages représentant les descriptions standard de la langue. Ainsi, la langue a été maintenue principalement grâce aux efforts de son créateur.
En février 1985, la première version distribuable de C est sortie. En octobre de la même année, le créateur du langage Bjarne Stroustrup a publié la première édition du livre "The C Programming Language".
Figure N3 - Couverture de la première édition du livre "The C Programming Language"
Il est devenu le premier standard tacite pour le langage C, tout comme le livre de Kernighan et Ritchey "The C Programming Language". C'était jusqu'à la première norme officielle.
Dans le livre, Stroustrup a couvert les fonctionnalités du langage ainsi que les problèmes de conception du point de vue C, pimentant chaque point avec de nombreux exemples de code.
Depuis, le livre a été réimprimé trois fois, chaque fois avec des mises à jour linguistiques. Au moment de la rédaction, la 4e édition la plus récente inclut la norme C 11.
En juillet 1989, le compilateur Cfront 2.0 est sorti. Elle a été substantiellement revue par rapport à la version précédente et a également apporté des nouveautés au langage C.
À l'heure actuelle, les modèles font déjà parler d'eux. Personne ne doute qu’ils seront mis en œuvre, car il s’agit d’un objectif réaliste. Quant à une autre fonctionnalité exceptionnelle potentielle – l’héritage multiple – représentait un véritable défi pour les créateurs de la communauté des programmeurs. Beaucoup ont dit qu’implémenter l’héritage multiple en C était impossible. Dans Simula, par exemple, une suggestion similaire a été rejetée en raison de la complexité inévitable du garbage collector. Cependant, l'héritage multiple était absolument nécessaire, car il simplifierait grandement le développement de bibliothèques dont le code était assez lourd sans lui.
En conséquence, l'héritage multiple a finalement été ajouté dans Cfront 2.0. Cet ajout au langage a suscité une controverse. Par exemple, certains ont soutenu que le langage Smalltalk, qui est la quintessence de la programmation orientée objet, n'a pas d'héritage multiple. C'est pourquoi C ne devrait certainement pas l'adopter. Le créateur du langage a supposé qu'une telle réaction était due au fait de prendre trop au sérieux l'héritage multiple.
La version C ci-dessus a également introduit :
En 1990, Borland a publié l'environnement de développement intégré Borland C pour développer des programmes C et C (quelle tournure, hah ?). Il était initialement destiné au développement sous DOS, mais le support Windows a ensuite été introduit également.
Figure N4 - Capture d'écran de Borland C
Historiquement, Borland C était un descendant de Turbo C mais incorporait les caractéristiques du C — prise en charge de la programmation orientée objet.
Chaque version de l'environnement avait son propre compilateur prenant en charge ses propres standards. Au fil du temps, Borland C s'est doté de nombreuses bibliothèques spécialisées pour un développement rapide d'applications.
La dernière version de Borland C IDE a été publiée en 1997, après quoi elle a été remplacée par la série Borland C Builder. La finale de Borland C a eu lieu en 2000 avec la sortie de Borland C 5.5 accompagné d'un compilateur.
Borland C était un éditeur sympa et confortable pour DOS. Il y avait même une sorte de coloration syntaxique.
Yuri Minaev, l'architecte du noyau C et C de l'analyseur PVS-Studio
Quatre ans après Borland, Microsoft a publié son environnement de développement intégré Visual C.
En 1986, Bjarne Stroustrup écrit un article "Qu'est-ce que la programmation orientée objet ?" dans lequel il a exprimé trois défauts de C :
L'héritage multiple a été introduit en 1989 avec C 2.0, et le reste des défauts a été corrigé en 1990 avec de nouvelles fonctionnalités du langage. Ils ont été décrits par Stroustrup dans le livre "Annotated C Reference Manual".
Les modèles et la gestion des exceptions sont apparus rapidement, les uns après les autres. Les modèles ont été approuvés à Seattle en juillet et le mécanisme de gestion des exceptions a été approuvé à Palo Alto en novembre. Leurs sorties rapprochées sont dues au fait que ces deux innovations répondent à des problèmes similaires. Selon le créateur du langage lui-même, les modèles permettent de réduire le nombre d'erreurs lors de l'exécution du programme en étendant les capacités du système de types statiques. Tandis que les exceptions vous permettent de gérer les erreurs restantes.
Les types paramétrés ont été pris en compte dans la première édition de C . Pourtant, ils ont dû être reportés faute de temps pour étudier suffisamment les questions de conception et de mise en œuvre. Les exceptions ont également été reportées pour la même raison. Et ce n'était pas pour rien. Leur conception a duré de 1984 à 1989.
Le « Manuel de référence C annoté » a également introduit les espaces de noms et la possibilité d'identifier les types au moment de l'exécution.
La programmation générique a commencé à prendre de l'ampleur à ce moment-là. C avec des modèles n'était pas un pionnier. Lors de la création de modèles, les créateurs tiraient des idées des langages de programmation ML, CLU et Ada.
Cependant, on peut affirmer sans se tromper que C faisait la promotion de ce paradigme. Les modèles ont permis d'écrire du code sans macros dans de nombreux cas, réduisant ainsi les risques de se tirer une balle dans le pied. Voici une ombre au tableau : la fonctionnalité pleinement opérationnelle qui simplifie le travail avec la programmation générique n'est apparue que par C 20. Mais même cela n'a pas arrêté les programmeurs lorsqu'ils ont appris que les modèles pouvaient permettre des calculs au stade de la compilation...
D’un autre côté, les exceptions en C ne sont pas si claires. Malheureusement, ils n’ont pas résolu tous les problèmes de gestion des erreurs par rapport aux approches précédentes. Le flux de contrôle devient non trivial lors de l'utilisation d'exceptions. Il existe de nombreuses façons de se tirer une balle dans le pied avec eux, comme hériter des exceptions de manière privée, intercepter les exceptions par valeur ou organiser les blocs catch dans le mauvais ordre, etc. En conséquence, certaines normes de codage interdisent leur utilisation, comme Google. Style de code C.
Philipp Khandelyants, chef d'équipe de l'équipe de développement C et C chez PVS-Studio
Le "Manuel de référence C annoté" est devenu en quelque sorte un précurseur de la standardisation officielle du C. Il décrivait toutes les innovations qui deviendraient bientôt la norme de la langue.
Dans cet article, nous avons couvert les événements de l'histoire du C et du C de 1969 à 1990. Dans le prochain article, nous approfondirons l'histoire du C de 1991 à nos jours :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!