- C++26 est officiellement finalisé sur le plan technique. Il inclut quatre fonctionnalités clés : la réflexion, le renforcement de la sûreté mémoire, les contrats (Contracts) et
std::execution
- La réflexion à la compilation constitue le moteur d’abstraction le plus puissant de l’histoire de C++ depuis l’introduction des templates, permettant au langage de se décrire lui-même et de générer du code
- Le simple fait de recompiler un code C++ existant en C++26 supprime toute une catégorie de comportements indéfinis (UB) liés aux variables locales non initialisées, tandis que la bibliothèque standard renforcée garantit la sûreté des limites
- D’après les déploiements chez Google, plus de 1 000 bugs ont été corrigés et le nombre de segfaults en production a baissé de 30 %
- On s’attend à une adoption rapide par les compilateurs, GCC ayant déjà fusionné la réflexion et les contrats dans sa branche trunk
C++26 est finalisé : la version la plus importante depuis C++11
- Lors de la réunion du comité ISO C++ à Croydon, Londres, au Royaume-Uni, le travail technique sur C++26 a été achevé définitivement
- Environ 210 participants (130 en présentiel, 80 à distance via Zoom), avec des représentants officiels de 24 pays
- L’essentiel de la réunion a été consacré au traitement de 411 commentaires internationaux (étape CD) reçus durant l’été
- Aucun ajout ni retrait de fonctionnalité : l’accent a été mis sur les finitions et le polissage
- C++26, finalisé lors de cette réunion, entre désormais dans la phase de rédaction du document final en vue du vote d’approbation internationale (DIS)
Les 4 fonctionnalités majeures de C++26
(1) Réflexion (Reflection)
- Il s’agit de la plus grande évolution de l’histoire du développement C++ depuis l’invention des templates : le langage peut se décrire lui-même et générer du code
- En juin 2025, le comité C++ a inclus la réflexion à la compilation dans le projet C++26, marquant un tournant dans l’histoire du langage
- Elle est présentée comme « le nouveau moteur le plus puissant pour exprimer des abstractions efficaces, et il faudra probablement dix ans pour découvrir tout ce que cette fusée peut accomplir »
(2) Renforcement de la sûreté mémoire
- Le simple fait de recompiler un code C++ existant en C++26 élimine toute la catégorie d’UB (comportements indéfinis) liée à la lecture de variables locales non initialisées
- La bibliothèque standard renforcée (Hardened Standard Library) est standardisée et garantit la sûreté des limites pour des types majeurs comme
vector, span, string et string_view
- Le surcoût de performance mesuré est en moyenne de 0,3 % (moins de 1 %)
- Elle est déjà déployée sur des centaines de millions de lignes de code chez Apple et dans des services Google
- Chiffres issus du déploiement chez Google :
- Plus de 1 000 bugs corrigés
- Prévision de 1 000 à 2 000 bugs évités par an
- 30 % de réduction du taux de segfaults sur l’ensemble de la production
- Sur tout le code C++ de Google, seuls 5 services ont demandé un opt-out complet, et seulement 7 endroits utilisent encore des API d’accès non sûres
(3) Contrats (Contracts) : pre, post, contract_assert
- C++26 introduit des contrats au niveau du langage — prise en charge des préconditions (precondition), postconditions (postcondition) et de l’instruction d’assertion
- Cette fonctionnalité est jugée bien plus puissante que la macro
assert du C
- Résultats des votes sur l’adoption des contrats :
- Février 2025 (fusion dans le working draft) : 100 pour, 14 contre, 12 abstentions
- Mars 2026 (validation finale de C++26) : 114 pour, 12 contre, 3 abstentions
- Des inquiétudes techniques ont persisté chez certains experts du comité, mais elles ont été largement discutées au cours de trois réunions et de nombreux appels
- Avant la réunion de novembre 2025, deux bugs de la spécification des contrats avaient déjà été corrigés à partir des retours reçus
(4) std::execution (Sender/Receiver)
- Il s’agit du modèle asynchrone de C++, un framework unifié pour exprimer et contrôler la concurrence et le parallélisme
- Il permet d’écrire facilement de la structured concurrency (concurrence à durée de vie strictement imbriquée), avec des propriétés de sûreté qui empêchent structurellement les data races
- Attention : la documentation reste insuffisante et les bibliothèques « fingers-and-toes » sont encore peu développées, ce qui rend son adoption plus difficile que pour d’autres fonctionnalités C++
- Il peut être nécessaire de se faire aider par des experts déjà familiers du sujet et d’écrire des bibliothèques d’adaptation pour l’interopérabilité avec du code asynchrone existant
Pourquoi une adoption rapide de C++26 est attendue
- Il s’agit de l’ensemble de fonctionnalités le plus attendu depuis C++11, avec la réflexion et le renforcement de la sûreté qui seront utilisés au quotidien par la majorité des développeurs C++
- À l’inverse, le Parallel STL, les concepts, les coroutines ou les modules de C++17, C++20 et C++23 n’ont pas eu un impact aussi large que C++11 sur l’ensemble des développeurs C++
- GCC et Clang ont maintenu, tout au long du développement de C++26, une pré-implémentation d’environ deux tiers des fonctionnalités
- GCC a déjà fusionné la réflexion et les contrats dans trunk, en attente de publication
Début des travaux sur C++29 : approfondir la sûreté mémoire
- Lors de cette réunion, le calendrier de C++29 a également été adopté, confirmant le cycle de publication sur trois ans
- L’objectif principal de C++29 est déjà fixé : renforcer davantage la sûreté des types et de la mémoire
- Des propositions visant à réduire encore les comportements indéfinis (UB) sont en cours d’examen
- Le SG23 (sous-groupe sûreté/sécurité) travaille à partir du profil de sûreté des types P3984 de Bjarne Stroustrup et du framework de profils génériques de Gabriel Dos Reis
- Oliver Hunt d’Apple a présenté P4158R0 « C++ Subsetting and Restrictions for Memory Safety »
- Une approche subset-of-superset a été appliquée à plus de 4 millions de lignes de code de WebKit
- Selon le rapport, elle bloque « de nombreuses classes de vulnérabilités, et la politique actuelle aurait empêché la plupart des exploits passés »
- Le thème de la sûreté mémoire a été débattu en profondeur lors de la session du mercredi soir, à laquelle participait plus de la moitié du comité, ainsi que lors d’une session EWG dédiée le vendredi après-midi avec environ 90 participants
- La bibliothèque des quantités et unités (P3045R7 "Quantities and units library") est passée des groupes SG6 et SG18 au LEWG (sous-groupe principal d’évolution de la bibliothèque)
Prochain calendrier
- Les deux prochaines réunions sont prévues à Brno, en République tchèque (juin) et à Búzios, près de Rio de Janeiro au Brésil (novembre)
- Les deux réunions lanceront les ajouts de fonctionnalités au working draft de C++29
- D’ici la prochaine réunion, de nombreuses téléconférences de sous-groupes sont déjà planifiées
Aucun commentaire pour le moment.