Le langage de programmation C a 50 ans
Le langage de programmation C a 50 ans,
et reste l'un des langages les plus plébiscités
Le langage de programmation C a 50 ans et reste l'un des langages les plus plébiscités. « C'est absolument stupéfiant de voir à quel point les gens des Bell Labs ont tout simplement "vu juste". Le système d'exploitation et la philosophie d'Unix, l'interpréteur de commandes d'Unix et le langage de programmation C ont si bien défini l'interface et les abstractions qu'ils dominent toujours 50 ans plus tard. Je me demande quel logiciel créé aujourd'hui nous regarderons dans 50 ans avec autant de respect », déclare un internaute.
C est un langage de programmation informatique à usage général. Il a été créé dans les années 1970 par Dennis Ritchie et les Bell Labs, et reste très largement utilisé et influent. De par sa conception, les fonctionnalités de C reflètent clairement les capacités des processeurs ciblés. Il a trouvé une utilisation durable dans les systèmes d'exploitation, les pilotes de périphériques, les piles de protocoles, bien que de moins en moins pour les logiciels d'application, et est commun dans les architectures informatiques qui vont des plus grands superordinateurs aux plus petits microcontrôleurs et systèmes embarqués.
Successeur du langage de programmation B, C a été développé à l'origine aux Bell Labs par Dennis Ritchie entre 1972 et 1973 pour construire des utilitaires fonctionnant sous Unix. Il a été appliqué à la réimplémentation du noyau du système d'exploitation Unix. Au cours des années 1980, le C a progressivement gagné en popularité. Il est devenu l'un des langages de programmation les plus utilisés avec des compilateurs C disponibles pour presque toutes les architectures informatiques et tous les systèmes d'exploitation modernes. Le langage C est normalisé par l'ANSI depuis 1989 (ANSI C) et par l'Organisation internationale de normalisation (ISO).
C est un langage procédural impératif supportant la programmation structurée, la portée lexicale des variables et la récursion, avec un système de types statique. Il a été conçu pour être compilé afin de fournir un accès de bas niveau à la mémoire et des constructions de langage qui correspondent efficacement aux instructions de la machine, le tout avec un support d'exécution minimal. Malgré ses capacités de bas niveau, le langage a été conçu pour encourager la programmation multiplateforme. Un programme C conforme aux normes et écrit dans un souci de portabilité peut être compilé pour une grande variété de plates-formes informatiques et de systèmes d'exploitation avec peu de modifications de son code source.
Le C est un langage impératif et procédural dans la tradition d'ALGOL. Il possède un système de types statique. En C, tout le code exécutable est contenu dans des sous-routines (également appelées "fonctions", mais pas au sens de la programmation fonctionnelle). Les paramètres des fonctions sont transmis par valeur, bien que les tableaux soient transmis sous forme de pointeurs, c'est-à-dire l'adresse du premier élément du tableau. Le passage par référence est simulé en C par le passage explicite de pointeurs vers la chose référencée.
De nombreux langages ont emprunté directement ou indirectement au C, notamment C++, C#, le shell C d'Unix, D, Go, Java, JavaScript (y compris les transpilers), Julia, Limbo, LPC, Objective-C, Perl, PHP, Python, Ruby, Rust, Swift, Verilog et SystemVerilog (langages de description du matériel). [La plupart d'entre eux (Python étant une exception spectaculaire) expriment également une syntaxe très similaire à celle du C, et ils ont tendance à combiner la syntaxe reconnaissable des expressions et des déclarations du C avec des systèmes de types sous-jacents, des modèles de données et une sémantique qui peuvent être radicalement différents.
Depuis 2000, le langage C se classe régulièrement parmi les deux premiers langages dans l'indice TIOBE, une mesure de la popularité des langages de programmation.
« Je pense que Java/C# et Rust seront toujours utilisés et en bonne forme dans 50 ans. Les deux premiers sont bons pour la programmation de la couche application avec suffisamment de fonctionnalités pour être utiles mais pas trop pour permettre aux programmeurs de se tirer dans le pied à plusieurs reprises », ironise un programmeur C.
« Ils sont également très rapides pour la plupart des applications. Rust pourrait être l'avenir lorsque les performances ou la maîtrise du matériel sont nécessaires. Sinon, il ne restera que le C et le C++ (imaginez que le C ait 100 ans et qu'il y ait encore des gens qui l'embauchent pour programmer le code de leur nouvelle montre numérique)
« Peut-être qu'un ou deux des frameworks web populaires seront encore utilisés. Quelque chose comme React, Node js, ou Blazor (si vous adhérez au rêve de Microsoft de fournir un langage unique pour tout développer, suffisamment rapide et portable). Je ne vois pas pourquoi Python ne continuerait pas à se développer, étant toujours un langage de script puissant dans un demi-siècle », ajoute-il.
Et vous ?
:fleche: Quelle est votre appréciation du langage C après 50 ans d'existence ?
:fleche: Avez-vous une expérience avec le langage C ? Que pensez-vous de ce langage ?
Voir aussi :
:fleche: Microsoft célèbre les 20 ans de .NET, son Framework de développement, les dépôts .NET seraient dans le top 30 des projets open source à plus haute vélocité sur GitHub depuis 2017
:fleche: Microsoft a publié la version stable de Visual Studio 2022 avec une nouvelle expérience de rechargement à chaud pour les applications natives C++, cette version est disponible uniquement en 64 bits
:fleche: Un développeur publie un langage de programmation qui peut être traduit automatiquement en C, C++, C#, Java, JavaScript, etc., avec une traduction rapide et sans machine virtuelle
Un des plus mauvais langage
Bonjour à toutes et tous,
Je vais me faire incendier mais, pour moi, le langage C est un des plus mauvais langage qui soit et je sais de quoi je parle ayant été chef de projet du développement d'un compilateur de langage C avant même qu'il soit normalisé (le seul document disponible à l’époque était le livre de Brian W. Kernighan et Dennis M. Ritchie, première version de 1978. Ce développement a été effectué au début des années 80.
Pourquoi est-ce un mauvais langage ?
Parce que :
- Il n'est que faiblement typé donc pas du tout "secure" (conversions implicites)
- On peut arriver à faire n'importe quoi avec les pointeurs en C grâce au "cast"
- Le "switch/case" est une horreur car on est obligé d'utilisé break sans arrêt
- Ler #define est une horreur car il oblige à faire des interactions dans le compilateur entre la phase d'analyse lexicale et syntaxique (bon depuis il y a le typedef)
- L’équivalence pointeur/tableau qui a obligé Stroustrup a définir un « grigris » en C++ (la paire de crochet sur delete) pour indiquer qu’on veut détrire toutes les instances d’un tableau et pas seulement le premier élément.
- les setjump et longjump pour « simuler » le mécanisme d’exception qui n’existe pas en C.
- Le caractère NULL (\0) pour matérialiser la fin d’une chaîne de caractère alors que les chaînes de longueur variable étaient bien mieux traitées à l’époque dans un langage comme PL/1.
Je pourrais allonger la liste de bien d’autres défauts mais ce n’est pas la peine d’alourdir le fardeau.
PS : c'est curieux comme ce sont toujours les plus mauvais "outils" qui sont choisis par la majorité (et pas seulement pour les langage informatiques, mais en général). On recommence d'ailleurs avec Python et son typage dynamique déficient (dans les nouvelles versions, il y a bien une tentative d'introduire le typage statique mais est-ce réellement utilisé ?) et sa matérialisation des blocs d'instructions par l'indentation (un comble dans la stupidité !). Hélas il y a d'autres langages qui utilisent cette... syntaxe comme : CoffeeScript, Miranda, Occam par exemple.