La dernière réunion du comité date du samedi 10 novembre dernier où le comité ISO C ++ a achevé sa réunion d'automne à San Diego en Californie. « C’était la plus grande réunion ISO C ++ de nos 29 ans d’existence, avec environ 180 participants, représentant 12 pays », précise Sutter dans son billet de blog. « Comme il s’agit d’une des dernières réunions sur l’ajout de fonctionnalités au C ++ 20, nous avons donné la priorité aux propositions susceptibles de faire du C ++ 20 et nous en avons adopté un certain nombre », a-t-il continué en remerciant tous les participants à ce comité dont l'objectif est de poursuivre les travaux sur la prochaine norme internationale du langage, le C ++ 20. Cette réunion était la dernière réunion à examiner de nouvelles propositions pour C ++ 20.
Le comité est organisé en plusieurs groupes et sous-groupes, chacun dirigé par le président désigné. La dernière édition du comité a vu grandir le nombre de ces participants. « La réunion de cette semaine a été extraordinaire. L'envoi de la réunion préparatoire comprenait 274 communications, soit environ deux fois plus que toute réunion précédente, et 180 personnes y ont assisté, ce qui en fait la plus grande réunion de comité C ++ jamais organisée », peut-on lire dans le compte rendu de la réunion. La première étape a été la formation de deux nouveaux groupes d’étude à savoir le SG17, incubateur du groupe de travail sur l'évolution du EWGI, présidé par JF Bastien et le SG18, incubateur du groupe de travail sur l'évolution des bibliothèques LEWGI, présidé par Bryce Adelstein Lelbach.
Ces nouveaux groupes d’incubateurs devraient constituer des étapes supplémentaires dans les filières d’évolution des langues et des bibliothèques. Leur travail consiste à affiner, fusionner et filtrer les propositions nouvelles et tournées vers l’avenir pour permettre la réalisation des objectifs stratégiques du comité à long terme à savoir, améliorer la prise en charge de logiciels fiables à grande échelle et des modèles de concurrence, simplifier l'utilisation du langage, corriger les principales sources d'insatisfaction et les principales sources d'erreur du langage, etc. Deux autre nouveaux groupes ont été également créés lors de cette réunion : le SG19, pour l'apprentissage automatique présidé par Michael Wong et le SG20, pour l'éducation présidé par JC van Winkel.
Lors de cette réunion, deux fonctionnalités principales ont été adoptées pour le C ++ 20 au niveau de la librairie Ranges et des notations de commodité. La notation de commodité a déjà été ajoutée à la fonctionnalité de base des concepts de C ++ 20 en 2017, mais sans la notation pour écrire des modèles sans les mots-clés "template" ou "require". « Lors de cette réunion, nous avons finalement convergé sur une syntaxe de commodité pour écrire des modèles contraints abordant tous les problèmes majeurs identifiés par les concepteurs de la notation de commodité de Concepts TS, tout en étant acceptables pour les concepteurs de concepts principaux. Pour la première fois, outre le cas particulier des lambdas génériques, C ++ vous permettra désormais d'écrire de nombreuses fonctions génériques sans “template” ni crochets angulaires », explique Herb Sutter dans son billet de blog.
D'autres nouveautés et améliorations ont été également apportées à C ++ 20 lors de cette réunion. Entre autre, on a :
- les fonctions immédiates « consteval » qui permettent d'écrire des fonctions dont l'exécution est garantie au moment de la compilation. « C’est essentiel pour le type de code sur lequel les métaclasses s’appuient, et c’est formidable de le voir maintenant adopté dans le cadre de C ++ 20 », commente le Sutter ;
- l'union constexpr qui permet de changer le membre actif d'une union pendant le code au moment de la compilation ;
- constexpr try and catch qui permet d'écrire try / catch dans le code constexpr. « Cependant, notez que cela ne vous permet pas de générer des exceptions lors de la compilation », précise le Sutter ;
- la révision du modèle de mémoire C ++ qui apporte plusieurs mises à jour pour les architectures plus faibles, notamment une meilleure prise en charge de la mémoire GPU ;
- le contrôle d'accès dans les conditions du contrat qui permet aux conditions préalables et post-conditions des fonctions publiques d'accéder également à des membres privés ;
- char8_t : un type pour les caractères et les chaînes UTF-8 qui est une autre étape vers la prise en charge étendue de Unicode ;
- les espaces de noms en ligne imbriqués qui étendent la nouvelle syntaxe de déclaration de l'espace de noms imbriquée C ++ 20, également pour les espaces de nom en ligne ;
- etc.
« Nous sommes sur la bonne voie pour rendre la plupart des codes C ++ "normaux" et disponibles au moment de la compilation - et bien que le C ++ 20 n’y parvienne pas complètement, le C ++ 20 est une version historique et un point de départ décisif pour laisser en permanence les crochets et solutions palliatives que nous utilisons depuis les années 1990, avec la naissance presque complète du code C ++ de compilation entièrement "naturel". Rappelons que nous avons déjà ajouté la prise en charge des types définis par l'utilisateur en tant que types de paramètres de modèle. Bientôt, nous pourrons peut-être utiliser des chaînes comme arguments de modèle et utiliser des conteneurs tels que std::vector dans le code à la compilation. Bien sûr, il y aura probablement des limites. Par exemple, supporter std::thread au moment de la compilation est possible, mais il est moins probable que l'effort en vaille la peine », conclut Herb Sutter, organisateur de la réunion.
Les internautes se sont prononcés sur le travail de ce comité. Ils les ont félicité pour l'effort fourni et n'ont pas manqué l'occasion d'exprimer les fonctionnalités qu'ils auraient souhaité avoir dans le C ++ 20. L'un d'eux dit par exemple que la seule fonctionnalité dont il a besoin au moment de la compilation est que le compilateur calcule lui-même les déclarations. Il ajoute qu'en 2018, la gestion manuelle des déclarations et des fichiers d'en-tête n'est plus nécessaire.
Source : Billet de blog
Et vous ?
Que pensez-vous de ces améliorations apportées au C ++ 20 ?
Quelles autres améliorations aimeriez-vous avoir dans le langage ?
Voir aussi
La spécification de la nouvelle version du langage C++ (C++17) est finalisée quelles sont les nouveautés introduites ?
Cours de C/C++
De C++14 à C++17, qu'est-ce qui a changé avec la nouvelle version du langage C++ : un document de la Standard C++ Foundation
Visual Studio "15" : de nouvelles fonctionnalités C++14/17 et des améliorations pour les développeurs Python dans la cinquième préversion