Herb Sutter : une carrière dédiée à l’évolution de C++
Herb Sutter est un nom bien connu dans le monde du développement logiciel, en particulier pour sa contribution à l’évolution de C++. Ingénieur en chef chez Microsoft pendant plus de deux décennies, il a joué un rôle de premier plan dans la direction de l’implémentation et de la standardisation de C++ à l’échelle mondiale. Sutter a également influencé les grandes décisions techniques qui ont façonné C++ en tant que langage polyvalent, performant et moderne. Son influence a été déterminante dans les versions majeures, y compris C++11, C++14, C++17, C++20, et C++23.
Herb Sutter, président du comité C++ de l'ISO, a quitté Microsoft après 22 ans d'activité, pour devenir technical fellow chez Citadel Securities, où il travaillera sur la stratégie technique et la formation. Il continuera à présider le comité ISO et affirme que 2024 a été une « année charnière » pour le langage.
Sutter s'est exprimé lors de la conférence CppCon en septembre, où il a déclaré que « la norme C++ 26 ... est susceptible de changer la façon dont nous développons des logiciels » et qu'elle constitue le plus grand changement apporté au langage depuis C++ 11. La spécification de C++ 26 devrait être achevée à la mi-2026, comme son nom l'indique, bien que le déploiement des fonctionnalités mises en œuvre dans des compilateurs tels que Clang et GCC sera progressif ; certaines sont déjà présentes.
Sutter a identifié quatre caractéristiques clés de C++ 26 qui, selon lui, « semblent en bonne voie ». Il s'agit :
- d'améliorations apportées à std:execution (une bibliothèque standard pour les opérations asynchrones) pour améliorer la concurrence et le parallélisme
- d'améliorations de la sécurité des types et de la mémoire, dans le but d'atteindre la parité avec d'autres langages modernes et plus sûrs.
- la réflexion et la génération de code, décrites par Sutter comme « faisant partie de notre changement radical vers la programmation à la compilation » et « sans doute [la] fonctionnalité la plus impactante jamais ajoutée ».
- des contrats, qui spécifient les interfaces de manière à ce que leur conformité puisse être vérifiée, y compris les préconditions, les postconditions et les affirmations d'état valide.
La sécurité est un problème majeur dans la communauté C++, de nombreux experts en sécurité recommandant aux développeurs de passer à des langages tels que Rust afin d'éviter les bogues et les problèmes associés à des problèmes tels que l'utilisation hors limites de la mémoire et les comportements indéfinis. Lors de la conférence CppCon, Sutter a déclaré que la parité de sécurité ne signifiait pas la perfection, mais que les « cibles prioritaires » seraient abordées, notamment l'augmentation du nombre de bibliothèques sûres au sein de la norme, la suppression des comportements indéfinis liés à la sécurité, de nouvelles règles de sécurité statiques à la compilation et des contrôles de sécurité dynamiques.
Dans un billet de blog publié cette semaine, Sutter a déclaré que la version précédente, C++ 11, avait introduit le C++ moderne avec des fonctionnalités telles que l'auto, les lambdas et les pointeurs intelligents sûrs. C++ 26 se caractérisera par « la sécurité par défaut et une prise en charge de premier ordre des bibliothèques génératives à la compilation basées sur la réflexion ».
C++ 11 : une révolution qui a modernisé le langage
Avant d’anticiper les changements que pourrait apporter C++26, il est important de revenir sur l’impact de C++11. Sorti en 2011, C++11 est considéré comme une révolution dans le monde C++. Cette version a introduit des fonctionnalités telles que les expressions lambda, les pointeurs intelligents (smart pointers), la gestion de la concurrence (multithreading), les initialisations uniformes, ainsi que les "move semantics" (transfert de ressources). Ces évolutions ont permis de simplifier le code, d’améliorer les performances et de rendre C++ plus attractif pour une nouvelle génération de développeurs.
C++ 26 : une promesse d’impact équivalent à celui de C++11
Selon Sutter, C++ 26 pourrait représenter un tournant similaire, voire plus profond que celui apporté par C++11. Bien que les détails précis restent encore confidentiels, certaines orientations sont déjà connues. La prochaine version devrait se concentrer sur plusieurs axes :
- Simplicité et expressivité : Face à la complexité croissante du langage, le comité de standardisation envisage de simplifier la syntaxe et les concepts, rendant le langage plus accessible aux développeurs novices tout en préservant sa puissance.
- Performances optimisées : C++ a toujours été un langage apprécié pour son efficacité et sa capacité à produire du code performant. C++26 devrait poursuivre cette tradition en intégrant de nouvelles optimisations qui répondent aux besoins des applications modernes, notamment celles qui demandent une grande puissance de calcul.
- Interopérabilité et portabilité : L’essor des systèmes embarqués et des plateformes hétérogènes a conduit à une demande accrue pour un langage facilement adaptable. La standardisation du langage avec des API plus portables et des extensions facilitant l'interopérabilité pourrait être l’un des objectifs majeurs de cette version.
- Sécurité et gestion de la mémoire : La gestion de la mémoire et la sécurité des applications sont des préoccupations croissantes. C++26 pourrait introduire des fonctionnalités pour réduire les risques d’erreurs mémoire tout en assurant une meilleure sécurité des applications.
J'étais sincère lorsque j'ai dit, lors de ma présentation à la CppCon, que la prochaine décennie du C++ serait dominée par la réflexion et les améliorations de la sécurité, et que C++26 s'annonce comme la version la plus impactante depuis C++11, qui a ouvert une nouvelle ère pour le C++ ; c'est une période passionnante pour le C++ et j'ai l'intention de continuer à passer beaucoup de temps à contribuer à C++26 et au-delà.
Les réactions des développeurs
Sutter fait preuve d'un enthousiasme contagieux à l'égard du langage. « Il y a tellement de possibilités avec la réflexion/génération ! J'attends avec impatience la standardisation complète et l'implémentation du compilateur », a déclaré un développeur en commentant la conférence.
D'autres, en revanche, sont plus prudents et craignent que le langage ne devienne encore plus complexe : « Tout le langage est devenu si compliqué. Des efforts comme Cppfront aident, mais nous avons besoin d'un nouveau langage de programmation inspiré du C++ pour renaître de ses cendres », a déclaré un développeur, ajoutant : « et, non, ce n'est pas Rust”. Cppfront est un compilateur expérimental créé par Sutter pour tester de nouveaux concepts.
Il est toujours plus facile d'ajouter des fonctionnalités à un langage que de les supprimer, en raison de la nécessité d'assurer la compatibilité avec le code existant.
Sutter a travaillé sur Visual C++ chez Microsoft, un outil largement utilisé au sein de l'entreprise pour Windows et pour des applications clés telles qu'Office. Curieusement, compte tenu du rôle de Sutter au sein du comité ISO, Visual C++ a eu tendance à être lent dans la mise en œuvre de nouvelles fonctionnalités C++, par rapport à Clang et GCC.
Ces dernières années, des voix éminentes au sein de Microsoft ont plaidé en faveur du passage à Rust pour des raisons de sécurité et de fiabilité, notamment le directeur technique d'Azure, Mark Russinovich.
Le futur de C++ sans Sutter chez Microsoft
Si Sutter quitte Microsoft, il reste néanmoins impliqué dans la communauté C++. Il continuera à jouer son rôle de président du comité ISO C++ et à guider le développement du langage, même en dehors du cadre de l’entreprise. Son départ laisse toutefois un vide chez Microsoft, où il a contribué à positionner C++ comme un langage clé de l’écosystème de développement, notamment pour les applications nécessitant un haut niveau de performance.
La prochaine étape pour Sutter pourrait le voir se consacrer encore plus intensément à la standardisation et à la mise en place de directives pour l’évolution de C++. Il est également probable qu'il s’implique dans la formation et la documentation pour accompagner les développeurs vers une adoption rapide des nouvelles fonctionnalités de C++ 26.
Nouvelles fonctionnalités du C++11
Sources : vidéo dans le texte, Herb Sutter
Et vous ?
Quels changements ou améliorations espérez-vous voir dans C++ 26 ? Avez-vous des fonctionnalités spécifiques en tête qui pourraient améliorer votre expérience de développement ?
Pensez-vous que C++ reste pertinent face à d’autres langages plus récents comme Rust ou Go ? Dans quel type de projets préférez-vous utiliser C++ par rapport à ces langages ?
Le départ de Herb Sutter pourrait-il affecter la trajectoire de développement de C++ ? Croyez-vous qu’un changement dans la direction de Microsoft pourrait influencer les priorités du comité ISO C++ ?
En quoi la simplification de C++ pourrait-elle vous aider dans votre travail ? Est-ce que la complexité actuelle de C++ vous pose des défis spécifiques ?
Est-ce que vous considérez C++ comme le langage de choix pour les projets axés sur la performance ? Si oui, comment voyez-vous les nouvelles fonctionnalités de C++ 26 renforcer cette réputation ?
Quel est, selon vous, le plus grand défi auquel C++ doit faire face aujourd'hui ? S’agit-il de la complexité, de la sécurité mémoire, de la concurrence avec d’autres langages, ou d’autre chose ?