Comment le C ++, un langage plus ancien sans support commercial sérieux, a-t-il réussi à prospérer face à tout cela ? C’est la question à laquelle s’efforce de répondre Bjarne Stroustrup dans son article Thriving in a Crowded and Changing World : C++ 2006–2020 (s'épanouir dans un monde surpeuplé et changeant: C ++ 2006 – 2020).
Cet article se concentre sur les principaux changements apportés à la norme ISO C++ pour les révisions de 2011, 2014, 2017 et 2020. La bibliothèque standard représente environ les 3/4 de la norme C++ 20, mais cet article se concentre principalement sur les fonctionnalités du langage et les techniques de programmation qu'elles prennent en charge.
En guise d’introduction, il explique :
« À l'origine, j'ai conçu C ++ pour répondre à la question "Comment manipulez-vous directement le matériel informatique et supportez-vous également une abstraction efficace de haut niveau ?" Au fil des ans, C++ est passé d'une solution relativement simple basée sur une combinaison d'installations des langages C et Simula visant la programmation de systèmes sur des ordinateurs des années 1980 à un outil beaucoup plus complexe et efficace pour une gamme extraordinaire d'applications. Il conserve son double objectif:
- Mappage direct des constructions de langage avec les installations matérielles
- Abstraction sans frais généraux
« Les abstractions sont représentées dans le code comme des fonctions, des classes, des modèles, des concepts et des alias. C++ est un langage vivant, il change donc pour répondre à de nouveaux défis et les styles d'utilisation évoluent. Ces défis et changements dans la période de 2006 à 2020 sont au centre de cet article. Bien sûr, le langage ne change pas de lui-même; il est changé par les gens. C'est donc aussi l'histoire des personnes impliquées dans l'évolution du C ++, la façon dont elles perçoivent les défis, interprètent les contraintes sur les solutions, organisent leur travail et résolvent leurs inévitables différences. Lorsque je présente une fonctionnalité en langage ou bibliothèque standard, je le fais dans le contexte de l'évolution générale du C ++ et des préoccupations des individus impliqués à l'époque. Pour de nombreuses fonctionnalités acceptées au début de la période, nous bénéficions désormais du recul d'une utilisation industrielle massive.
« Le C++ est avant tout un langage industriel, un outil de construction de systèmes. Pour un utilisateur, "C++" n'est pas simplement un langage tel que défini par une spécification; il fait partie d'un ensemble d'outils avec de nombreuses pièces:
- Le langage
- La bibliothèque standard
- De nombreuses autres bibliothèques
- Des bases de code massives (souvent anciennes)
- Des outils (y compris d'autres langages)
- L’enseignement et la formation
- Le soutien communautaire
« Lorsque cela est possible et pertinent, je considérerai les interactions entre ces "parties".
« Il y a un mythe, un mythe très populaire, selon lequel les développeurs veulent que leurs langages soient simples. C'est évidemment le cas lorsque vous devez apprendre un nouveau langage, concevoir un cours ou décrire un langage dans un article académique. Pour de telles utilisations, avoir un langage incarnant clairement quelques principes clairs est un avantage évident et l'idéal. Lorsque l'accent passe de l'apprentissage à la fourniture et à la maintenance d'applications importantes, les demandes des développeurs passent de la simplicité à une prise en charge complète, à la stabilité (compatibilité) et à la familiarité. Les gens confondent invariablement la familiarité avec la simplicité et préfèrent la familiarité à la simplicité s'ils ont le choix. Une façon de voir le C++ est le résultat de décennies de trois exigences contradictoires :
- Rendez le langage plus simple !
- Ajoutez ces deux fonctionnalités essentielles maintenant !!
- Ne cassez (aucune partie de) mon code !!!
« J'ai ajouté des points d'exclamation parce que ces points sont souvent livrés avec une bonne dose d'émotion. Je voulais rendre les choses simples tout en m’assurant que les choses complexes ne soient pas impossibles ou inutilement difficiles. Le premier point est essentiel pour les développeurs qui ne sont pas des défenseurs du langage ; le dernier point pour les personnes qui implémentent un code fondateur. La stabilité est une propriété essentielle pour tous les systèmes qui durent depuis des décennies, mais un langage vivant doit s'adapter à un monde en évolution.
« De longues listes de nouvelles fonctionnalités et des préoccupations pratiques très détaillées sont au cœur du développement de C ++, contrôlé par son comité de normalisation ISO. C’est ce sur quoi insistent les personnes les plus virulentes et les plus influentes de la communauté, et il serait imprudent de juger leurs préoccupations et opinions uniquement sur la base de vues philosophiques ou théoriques ».
L’article contient de longues listes de fonctionnalités documentant la croissance de C ++. Les points techniques importants sont discutés et illustrés par de courts fragments de code. En outre, il présente certaines propositions qui ont échoué et les discussions qui ont conduit à leur échec. Il offre une perspective sur le flux ahurissant de faits et de caractéristiques au fil des ans. L'accent est mis sur les idées, les personnes et les processus qui ont façonné le langage.
Les thèmes incluent des efforts pour préserver l'essence du C ++ grâce à des changements évolutifs, pour simplifier son utilisation, pour améliorer la prise en charge de la programmation générique, pour mieux prendre en charge la programmation au moment de la compilation, pour étendre la prise en charge de la programmation simultanée et parallèle, et pour maintenir une prise en charge stable de code vieux de décennies.
La norme ISO C++ évolue à travers un processus de consensus. Inévitablement, il y a une concurrence entre les propositions et des affrontements sur la direction, les philosophies de conception et les principes. Le comité est maintenant plus grand et plus actif que jamais, avec jusqu'à 250 personnes qui se réunissent à une cadence de trois réunions par an (réunions qui durent une semaine) et beaucoup d'autres y participant par voie électronique. Bjarne Stroustrup note qu’ils essayent (pas toujours avec succès) d'atténuer les effets de la conception par le comité, la paralysie bureaucratique et l'enthousiasme excessif pour une variété de « modes de langages ».
Les sujets techniques spécifiques au langage incluent le modèle de mémoire, la concurrence et le parallélisme, le calcul au moment de la compilation, la sémantique de déplacement, les exceptions, les expressions lambda et les modules. Concevoir un mécanisme pour spécifier les exigences d'un modèle sur ses arguments qui est suffisamment flexible et précis, mais n'impose pas de coûts d'exécution s'est avéré difficile. Les tentatives répétées de concevoir des « Concepts » pour cela ont leurs racines dans les années 1980 et touchent à de nombreux problèmes de conception clés pour C++ et pour la programmation générique.
La description est basée sur la participation personnelle aux événements clés et aux décisions de conception, appuyée par les milliers d'articles et les centaines de minutes de réunion dans les archives du comité des normes ISO C ++.
Source : S'épanouir dans un monde surpeuplé et changeant: C ++ 2006 – 2020 (Bjarne Stroustrup)
Et vous ?
Quels langages de développement utilisez-vous ? Est-ce par choix ou contrainte professionnelle ?
Que pensez-vous du C++ ?
Quels sont les éléments qui vous intéressent le plus dans ce langage ?
Que pensez-vous de la courbe d'apprentissage du C++ ?