Comment le langage de programmation C s’est développé

Le langage de programmation C aura cinquante ans en 2022. Pourtant, malgré sa longue histoire, C reste l’un des langages de programmation “les plus utilisés” dans de nombreuses enquêtes sur les “langages de programmation populaires”. Par exemple, consultez le Indice TIOBE, qui suit la popularité des différents langages de programmation. De nombreuses applications Linux sont écrites en C, comme le bureau GNOME.
J’ai interviewé Brian Kernighan, co-auteur (avec Dennis Ritchie) de Le langage de programmation C livre, pour en savoir plus sur le langage de programmation C et son histoire.
D’où vient le langage de programmation C ?
C est une évolution d’une séquence de langages destinés à la programmation système, c’est-à-dire à l’écriture de programmes tels que des compilateurs, des assembleurs, des éditeurs et, finalement, des systèmes d’exploitation. Le projet Multics au MIT, avec Bell Labs comme partenaire, prévoyait de tout écrire dans un langage de haut niveau (une idée nouvelle à l’époque, vers 1965). Ils allaient utiliser le PL/1 d’IBM, mais c’était très compliqué, et les compilateurs promis n’arrivaient pas à temps.
Après un bref flirt avec un sous-ensemble appelé EPL (par Doug McIlroy de Bell Labs), Multics s’est tourné vers BCPL, un langage beaucoup plus simple et plus propre conçu et mis en œuvre par Martin Richards de Cambridge, qui, je pense, visitait le MIT à l’époque. Lorsque Ken Thompson a commencé à travailler sur ce qui est devenu Unix, il a créé un langage encore plus simple, basé sur BCPL, qu’il a appelé B. Il l’a implémenté pour le PDP-7 utilisé pour le premier système proto-Unix en 1969.
BCPL et B étaient tous deux des langages “sans type” ; c’est-à-dire qu’ils n’avaient qu’un seul type de données, entier. Le DEC PDP-11, qui est arrivé sur la scène vers 1971 et était l’ordinateur de la première véritable implémentation Unix, supportait plusieurs types de données, notamment des octets 8 bits ainsi que des entiers 16 bits. Pour cela, un langage prenant également en charge plusieurs types de données convenait mieux. C’est l’origine de C.
Comment C était utilisé dans les Bell Labs et les premières versions d’Unix ?
C n’était à l’origine utilisé que sur Unix, mais après un certain temps, il y avait aussi des compilateurs C pour d’autres machines et systèmes d’exploitation. Il était principalement utilisé pour les applications de programmation système, qui couvraient un large éventail de domaines intéressants, ainsi que de nombreux systèmes de gestion des opérations du réseau téléphonique d’AT & T.
Quel a été le projet le plus intéressant écrit en C aux Bell Labs ?
Le programme C le plus intéressant, le plus mémorable et le plus important était sans doute le système d’exploitation Unix lui-même. La première version d’Unix en 1971 était en langage d’assemblage PDP-11, mais au moment de la quatrième édition, vers 1973, il a été réécrit en C. C’était vraiment crucial car cela signifiait que le système d’exploitation (et tous ses logiciels de support ) pourrait être porté sur un autre type d’ordinateur essentiellement en recompilant tout. Pas si simple en pratique, mais pas loin.
Vous avez co-écrit Le langage de programmation C livre avec Dennis Ritchie. Comment ce livre est-il né et comment vous et Dennis avez-vous collaboré sur le livre ?
J’avais écrit un tutoriel sur le langage B de Ken Thompson pour aider les gens à s’y mettre. Je l’ai mis à niveau vers un tutoriel sur C lorsqu’il est devenu disponible. Et au bout d’un moment, j’ai tordu le bras de Dennis pour écrire un livre en C avec moi. Fondamentalement, j’ai écrit la plupart du matériel didactique, à l’exception du chapitre sur les appels système, et Dennis avait déjà écrit le manuel de référence, qui était excellent. Ensuite, nous avons fait des allers-retours pour lisser les parties du didacticiel; le manuel de référence est resté à peu près le même car il était si bien fait depuis le début. Le livre a été formaté avec le troff formateur, l’un des nombreux outils sous Unix, et j’ai effectué la majeure partie du travail de formatage.
Quand C est-il devenu une chose que d’autres programmeurs en dehors des Bell Labs utilisaient pour leur travail ?
Je ne me souviens pas vraiment bien à ce stade, mais je pense que C a surtout suivi Unix pendant la première demi-douzaine d’années environ. Avec le développement de compilateurs pour d’autres systèmes d’exploitation, il a commencé à se propager à d’autres systèmes en plus d’Unix. Je ne me souviens pas quand nous avons réalisé que C et Unix avaient un réel effet, mais cela devait être entre le milieu et la fin des années 1970.
Pourquoi C est-il devenu un langage de programmation si influent ?
La principale raison au début était son association avec Unix, qui s’est propagée rapidement. Si vous utilisiez Unix, vous écriviez en C. Plus tard, le C s’est répandu sur des ordinateurs qui n’exécutaient pas nécessairement Unix, bien que beaucoup l’aient fait à cause du compilateur C portable écrit par Steve Johnson. Le marché des postes de travail, avec des entreprises comme Sun Microsystems, MIPS (qui est devenu SGI) et d’autres, a été activé par la combinaison d’Unix et de C. L’IBM PC est arrivé un peu plus tard, vers 1982, et C est devenu l’un des langages standard, sous MS-DOS puis Windows. Et aujourd’hui, la plupart des appareils Internet des objets (IoT) utiliseront C.
C reste un langage de programmation populaire aujourd’hui, quelque 50 ans après sa création. Pourquoi C est-il resté si populaire ?
Je pense que C a atteint un point idéal avec efficacité et expressivité. Autrefois, l’efficacité importait vraiment car les ordinateurs étaient lents et avaient une mémoire limitée par rapport à ce à quoi nous sommes habitués aujourd’hui. Le C était très efficace, dans le sens où il pouvait être compilé en un code machine efficace, et il était suffisamment simple pour qu’il soit facile de voir comment le compiler. En même temps, c’était très expressif, facile à écrire et compact. Aucune autre langue n’a atteint ce genre d’endroit aussi bien, du moins à mon avis humble mais correct.
Comment le langage de programmation C a-t-il grandi ou changé au fil des ans ?
C a connu une croissance modeste, je suppose, mais je n’ai pas prêté beaucoup d’attention à l’évolution des normes C. Il y a suffisamment de changements pour que le code écrit dans les années 1980 nécessite un peu de travail avant d’être compilé, mais il s’agit principalement d’être honnête à propos des types. Les nouvelles fonctionnalités comme les nombres complexes sont peut-être utiles, mais pas pour moi, donc je ne peux pas faire de commentaire éclairé.
Quels problèmes de programmation peuvent être résolus le plus facilement en C ?
Eh bien, c’est un bon langage pour tout, mais aujourd’hui, avec beaucoup de mémoire et de puissance de traitement, la plupart des programmeurs sont bien servis par des langages comme Python qui s’occupent de la gestion de la mémoire et d’autres constructions de plus haut niveau. C reste un bon choix pour les niveaux inférieurs où la compression des cycles et des octets est toujours importante.
C a influencé d’autres langages de programmation, notamment C++, Java, Go et Rust. Que pensez-vous de ces autres langages de programmation ?
Presque toutes les langues sont à certains égards une réaction à leurs prédécesseurs. Pour trop simplifier, C++ ajoute des mécanismes pour contrôler l’accès à l’information, donc c’est mieux que C pour les programmes vraiment volumineux. Java est une réaction à la complexité perçue de C++. Go est une réaction à la complexité du C++ et aux restrictions de Java. Rust est une tentative de traiter les problèmes de gestion de la mémoire en C (et vraisemblablement en C++) tout en se rapprochant de l’efficacité de C.
Ils ont tous de vrais attributs positifs, mais d’une manière ou d’une autre, personne n’est jamais tout à fait satisfait, il y aura donc toujours plus de langues qui, à leur tour, réagissent à ce qui s’est passé avant. Dans le même temps, les langages plus anciens, pour la plupart, resteront là parce qu’ils font bien leur travail, et il y a une base intégrée où ils sont parfaitement bien, et il serait impossible de les réimplémenter dans quelque chose de plus récent.
Merci à Brian d’avoir partagé cette belle histoire du langage de programmation C !
Vous souhaitez apprendre la programmation C ? Commencez par ces articles de programmation C populaires de l’année dernière : 5 façons d’apprendre le langage de programmation C en 2022.