Dans un billet de billet publié sur son site personnel lundi, Sutter a déclaré que le thème principal de C++23 était "Compléter C++ 20", et certains des points forts incluent le module "std", "if consteval", les paramètres "this" explicites, la simplification du déplacement implicite, des améliorations pour le support d'Unicode, etc., et la fixation de la durée de vie des temporaires dans les boucles "range-for". Sutter a annoncé qu'en plus du travail sur C++23, le comité a également eu le temps de progresser sur un certain nombre de propositions post-C++ 23, y compris la poursuite du travail sur les contrats, l'exécution SIMD, et plus encore.
D'après Sutter, la première réunion en personne annulée par la pandémie aurait été la première réunion du cycle triennal de C++23. Cela signifie que la quasi-totalité du cycle de publication de C++23 et l'ensemble de la phase de "développement" du cycle ont été réalisés via Zoom avec plusieurs centaines de téléconsultations de 2020 à 2022. D'où le nom de code "Pandemic Edition". Plusieurs compilateurs prennent déjà en charge certaines nouvelles fonctionnalités introduites par C++ 23. La nouvelle version du langage de programmation créé par Bjarne Stroustrup prend en charge un module de bibliothèque standard qui accélère la compilation.
« Les modules permettent non seulement d'améliorer la vitesse de compilation et l'hygiène du code, mais également d'unifier l'organisation du code source des fonctions ordinaires et des templates. À terme, les modules constitueront l'amélioration la plus significative jamais apportée à la manière dont nous organisons notre code », a déclaré Stroustrup. La distinction .h/.cpp disparaît et le code source C++ est fondamentalement simplifié. Avec le module de bibliothèque standard, "Hello World" devient le suivant :
Code C++ : | Sélectionner tout |
1 2 3 4 5 | import std; int main() { Std::cout<< "Hello, World!\n"; } |
Stroustrup estime que ce code devrait compiler 10 fois plus vite que l'ancienne version utilisant #include <iostream>. Il estime que C++ 23 comporte de nombreuses améliorations mineures, mais certaines ne sembleront pas mineures. Stroustrup a fait remarquer qu'il ne s'agissait pas d'une mise à niveau majeure de C++ comme l'ont été C++ 11 et C++ 20. Comme l'a répété Sutter dans son billet de blogue lundi, il s'agissait plutôt de compléter C++ 20 et, avec un peu de chance, d'apporter quelques fonctionnalités importantes. Toutefois, la pandémie a imposé une limite aux ambitions, notamment la difficulté de se rencontrer en personne.
En conséquence, des fonctionnalités telles que le filtrage, les contrats et un modèle général pour la concurrence (exécuteurs) devront attendre C++ 26. En outre, C++ 23 ne comportera pas une fonctionnalité essentielle qui facilite l'écriture de code destiné à être exécuté dans des environnements informatiques parallèles. La nouvelle norme ne sera pas livrée avec une fonctionnalité d'algorithme asynchrone appelée "expéditeurs et récepteurs" (senders and receivers), qui permettra l'exécution simultanée du code sur un système comportant plusieurs puces, telles que des CPU et des GPU. Il s'agit d'une fonctionnalité attendue de longue date.
Par ailleurs, C++ 23 intervient à un moment où le débat sur la mise au rebut du C/C++ au profit de langages modernes et sûrs pour la mémoire, tels que Rust. Rust a gagné en popularité ses dernières années en raison de sa gestion sécurisée de la mémoire, et une partie de l'industrie conseille - y compris les grandes entreprises telles que Microsoft, Meta et Amazon - désormais de démarrer les nouveaux projets en Rust et non en C++. Selon les commentaires sur l'annonce de la fin des travaux sur la norme C++ 23, le comité doit proposer nouvelles fonctionnalités attrayantes à l'avenir afin de conserver la place de choix du C++ dans l'industrie.
Cette place de choix est actuellement sérieusement menacée par le C++ et même les organisations indépendantes et étatiques participent au débat. Le mois dernier, Consumer Reports, une organisation à but non lucratif spécialisée dans les tests de produit, a plaidé pour que les entreprises abandonnent des langages tels que C et C++ au profit de langages sûrs pour la mémoire tels que Rust. Consumer Reports estime que la sécurité de la mémoire a toujours été une source persistante de défauts dans l'industrie du logiciel, mais que de nouveaux langages permettent désormais de se mettre à l'abri de ces bogues dès la phase de conception.
Selon Consumer Reports, environ 60 à 70 % des vulnérabilités des navigateurs et des noyaux, ainsi que des bogues de sécurité trouvés dans les bases de code C/C++ , sont dus à un manque de sécurité de la mémoire, dont beaucoup peuvent être résolus par l'utilisation de langages à sécurité mémoire. En outre, en novembre 2022, la National Security Agency (NSA) des États-Unis a recommandé aux développeurs de s'éloigner stratégiquement des langages C et C++. Face aux rapports critiquant les problèmes du C++, Stroustrup a déclaré que "la sécurisation des logiciels via le langage Rust n'est pas supérieure à celle offerte par le C++".
« Il n'y a pas qu'une seule définition de la notion de sécurité et nous pouvons réaliser une variété de types de sécurité par une combinaison de styles de programmation, de bibliothèques de support et grâce à la mise à profit de l'analyse statique », a déclaré Stroustrup. Il suggère ainsi que ce qu’il est possible d’obtenir du C++ en matière de sécurisation des logiciels dépend entre autres du développeur et notamment de la connaissance des outils que lui offre le langage, de sa maîtrise du compilateur, etc. Bien que beaucoup pensent que Rust acte la mise au rebut du C/C++, il est clair que ces derniers seront encore là pour longtemps.
Sources : Herb Sutter, La norme C++ 23
Et vous ?
Quel est votre avis sur le sujet ?
Que pensez-vous de l'introduction des modules dans la bibliothèque standard du C++ ?
Selon vous, en quoi les modules pourraient-ils améliorer l'expérience des programmeurs C++ ?
Quel est votre avis sur le débat qui a lieu au sujet du C/C++ et de Rust ?
Voir aussi
Cppfront, la proposition de nouvelle syntaxe C++ par Herb Sutter, anime les débats entre développeurs sur les besoins en termes d'évolution du langage et les comparaisons avec des projets similaires
Consumer Reports publie un rapport détaillé encourageant l'adoption généralisée de langages sûrs pour la mémoire tels que Rust, et sensibilise sur les risques liés à la sécurité de la mémoire
La NSA exhorte les organisations à passer à des langages de programmation sécurisés dans la gestion de la mémoire pour éliminer un vecteur d'attaque souvent exploité par les cybercriminels
« La sécurisation des logiciels via le langage Rust n'est pas supérieure à celle offerte par le C++ », d'après Bjarne Stroustrup, contre une sortie de la NSA qui exclut le C++ des langages sécurisés