C++20 – Compte rendu du meeting de Cologne (Juillet 2019)

Bonjour à tous ! Le comité s’est réuni fin juillet à Cologne et je me suis donc dit que j’allais à nouveau vous faire un petit compte rendu des changements à venir à la suite de cela :).

Après le metting de San Diego en novembre 2018 (pour lequel j’avais également fait un petit compte rendu), le comité s’est à nouveau réuni fin juillet pour discuter de l’évolution du langage. Encore une fois, je ne vais pas entrer dans le détail de chaque ajout puisque ce sera probablement l’objet de prochains articles. Il s’agit ici de faire un petit tour des modifications apportées au langage.

Premier point à souligner, C++20 est maintenant feature-complete, c’est-à-dire que les fonctionnalités ajoutées au langage et à la bibliothèque standard sont figées et plus rien ne devrait être ajouté au draft d’ici la sortie officielle en 2020. Les prochains mois se concentreront sur des corrections de bug. Le programme du comité pour C++20 est disponible ici.

La nouvelle triste de ce meeting est la suppression des contrats, dont j’avais déjà parlé dans un précédent article, qui ont été sortis du draft C++20 et déplacés vers un groupe d’étude (SG 21). Il faudra donc attendre au minimum C++23 pour pouvoir en profiter. Si vous souhaitez plus d’information sur les raisons de ce report, dirigez vous vers la p1823.

Dans son habituel article post-meeting, Herb Sutter, indique que C++20 est la plus grosse mise à jour depuis C++11. Et en effet, entre les concepts, les ranges, les modules, les coroutines, les changements pour constexpr, le spaceship operator etc… il y a un grand nombre de nouveautés qui vont clairement profiter au langage.

A nouveau, un post reddit a été créé pour centraliser les ajouts qui sont officiellement inclus dans le draft de C++20. Je vous propose d’en faire un petit tour de ce qu’indique le post :

  • constexpr allocation : allocation dans les expressions constantes, ce qui entraîne donc la possibilité d’avoir std::vector et std::string en constexpr, ce qui va grandement élargir les possibilités de programmation compile-time. Ajoutez à ça TODO() :: Permit trivial default initialization in constexpr contexts.
  • std::format : permettant le formatage de chaîne ( std::format("Je suis {}.", name)). Notez que cet ajout n’inclue pas le formatage compile-time, les I/O formatés (il faudra pour le moment se contenter de passer des chaînes formatées via les opérateurs de flux classiques) et ne gère pas l’Unicode. Mais c’est à venir.
  • Beaucoup de choses concernant la synchronisation : atomic waits, semaphores, atomic_flag::test, verrous, barrières, stop token and joining thread.
  • source_location.
  • using enum : permettant d’importer une enum class comme un namespace.
  • le mot clef constinit : qui requiert qu’une variable ait une expression constante à l’initialisation (dans le but d’éviter le Static Initialization Order Fiasco).
  • les nouvelles constantes mathématiques : pi, e, ln2, ln10, sqrt2, phi  …
  • changement de casse pour les concepts : passage de PascalCase à snake_case dans un soucis d’uniformité.
  • [[nodiscard]] pour les constructeurs.
  • Changement de la hiérarchie des concepts d’itérateurs.
  • Vues :
  • Intégration du spaceship operator dans la SL : vu le titre du papier, c’est probablement un Protoss qui l’a rédigé.
  • Opérations sur les bits : rotl, rotr, popcount, count_one, count_zero…. qui mappent sur les instructions hardware correspondantes.
  • Changements sur la déduction des arguments pour les classes template : notamment le support de la déduction pour l’aggregate initialization et les alias de templates.
  • Déprécié : volatile.

Notez que cette liste n’est pas exhaustive. Tout cela s’ajoute donc à ce qui était déjà prévu depuis San Diego, avec notamment :

Si vous souhaitez plus d’informations sur l’avancement des différents working groups, je vous conseille de lire en détail le post reddit correspondant.

En tout cas, ça fait beaucoup de changements à venir pour le C++, et donc autant de potentiels articles qui verront le jour prochainement pour détailler tout cela =).

En attendant, je vous remercie pour votre lecture et je vous dis à très bientôt !

Références et ressources

%d bloggers like this: