- La prochaine norme C++ après C++20
- Ce n’est pas un game changer comme C++98, C++11 ou C++20, mais plutôt une évolution modeste du niveau de C++17
Retour sur l’évolution de la norme C++ (sur 40 ans)
C++98
- À la fin des années 80, Bjarne Stroustrup et Margaret A. Ellis ont écrit le célèbre livre Annotated C++ Reference Manual (ARM)
- Ce livre avait deux objectifs
- comme il existait trop d’implémentations indépendantes de C++, l’ARM définissait les fonctionnalités de C++
- il a servi de base à la norme C++98 (ISO/IEC 14882)
- C++98 incluait plusieurs fonctionnalités importantes
- Templates
- STL (Standard Template Library) : inclut les conteneurs, algorithmes, chaînes de caractères et flux d’E/S
C++03
- C++03 (14882:2003) n’a apporté que de très petites corrections techniques
- Dans la communauté, C++03 incluant C++98 est appelé « C++ legacy »
TR1
- En 2005, un événement intéressant a eu lieu : la publication de TR1 (Technical Report 1)
- TR1 a été une étape majeure vers C++11 et le premier pas vers le Modern C++
- Il s’appuie sur le projet Boost des membres du comité de normalisation C++
- Il incluait 13 bibliothèques destinées à entrer dans la prochaine norme C++ (expressions régulières, nombres aléatoires, smart pointers comme
std::shard_ptr, tables de hachage, etc.)
C++11
- C’était la norme C++ suivante, mais nous l’appelons Modern C++. Cette appellation inclut aussi C++14 et C++17
- C++11 a complètement changé la manière de développer en C++
- en plus des composants de TR1, il a introduit move semantics, perfect forwarding, variadic templates, constexpr, etc.
- il inclut également un modèle mémoire fondé sur les threads et une API de threading
C++14
- Une petite norme C++. Elle a introduit les read-writer locks, les lambdas généralisées et les fonctions constexpr généralisées
C++17
- Ni grande ni petite
- Elle inclut deux fonctionnalités remarquables : Parallel STL et le système de fichiers standardisé
- environ 80 algorithmes STL peuvent être exécutés via des politiques d’exécution (parallèle, séquentiel, vectorisé)
- Elle a été fortement influencée par Boost : le système de fichiers et trois types de données (
std::optional, std::variant, std::any)
C++20
- Comme C++11, C++20 a changé notre façon de programmer en C++
- En particulier avec quatre grands apports
- Ranges : la bibliothèque Ranges permet d’exprimer directement les algorithmes sur les conteneurs et de les composer avec l’opérateur pipe pour les appliquer à des flux de données infinis
- Coroutines : elles rendent la programmation asynchrone mainstream en C++. Elles servent de base au multitâche coopératif, aux event loops, aux flux de données infinis et aux pipelines
- Concepts : ils changent la manière de penser et de programmer avec les templates. Ils permettent de poser des contraintes sur les arguments de template, de faire des vérifications de type, etc., avec validation à la compilation
- Modules : ils permettent de dépasser les limites des fichiers d’en-tête. Ils promettent beaucoup de choses : par exemple, ne plus avoir besoin du préprocesseur, réduire à terme les temps de build et faciliter la construction des packages
C++23
- En juillet 2023, C++23 est en attente du vote final
- Il ajoute « Deducing this », une fonctionnalité petite par la taille mais très influente pour le langage lui-même
- à la manière de Python, le pointeur
this transmis implicitement à une fonction membre peut être rendu explicite
- cela simplifie l’implémentation de techniques complexes comme le CRTP (Curiously Recurring Template Pattern) ou le pattern Overload
- La bibliothèque C++23 apporte aussi des ajouts importants
- possibilité d’importer directement la bibliothèque standard avec
import std;, ou d’utiliser les format strings de C++20 dans std:print et std:println
std::flat_map, qui remplace std::map pour de meilleures performances
- l’interface de
std::optional est étendue à une interface monadique pour améliorer la composabilité
- un nouveau type de données :
std::expected
std::mdspan, un span multidimensionnel
std::generator, une coroutine pour produire des flux de nombres
2 commentaires
Il semble qu’il n’y ait toujours pas de nouvelles concernant une norme de mise en réseau.
Même pour la prochaine norme ;; j’ai l’impression que ça ne sera pas forcément plus certain.