15 points par GN⁺ 2026-01-26 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Le projet Chromium définit clairement le périmètre d’utilisation et les éléments interdits des fonctionnalités des standards C++ récents afin de préserver la cohérence du code et la sécurité
  • De C++11 à C++23, chaque standard distingue les états autorisé, interdit et à examiner (TBD), et la bibliothèque Abseil est soumise aux mêmes critères
  • Parmi les fonctionnalités interdites figurent std::shared_ptr, std::function, std::regex, std::filesystem, std::byte, char8_t, modules, etc.
  • Parmi les fonctionnalités autorisées figurent concepts, l’opérateur spaceship, designated initializer, std::to_underlying, les algorithmes std::ranges, etc.
  • Ce guide s’applique à Chromium et à l’ensemble de ses sous-projets, et sert de référence clé pour garantir la stabilité du code et la compatibilité de build

Politique d’utilisation du C++ moderne dans Chromium

  • Chromium n’adopte pas immédiatement les nouveaux standards C++ et les classe en état « initially supported » uniquement une fois que le support de la toolchain est suffisamment assuré
    • Les fonctionnalités sont ensuite classées selon les statuts autorisé (allowed), interdit (banned) et à examiner (TBD)
  • Les propositions de changement de statut pour une nouvelle fonctionnalité peuvent être soumises via la mailing list cxx@chromium.org
  • Deux ans après le support initial, chaque fonctionnalité est déplacée vers la liste des éléments autorisés ou interdits après examen explicite

Fonctionnalités interdites de C++11

  • Fonctionnalités du langage : inline namespace, long long, user-defined literals
  • Fonctionnalités de bibliothèque : <chrono>, <regex>, <random> engines, <exception>, <ratio>, <thread>, etc.
    • Les exceptions sont entièrement désactivées, et seul noexcept est autorisé
    • À la place de std::bind, std::function, std::shared_ptr, std::weak_ptr, Chromium utilise base::Bind, base::Callback, base::RefCounted

Fonctionnalités interdites de C++17

  • Les littéraux de caractères UTF-8 (u8) sont interdits en raison de problèmes de compatibilité avec char8_t
  • Éléments de bibliothèque interdits :
    • fonctions mathématiques spéciales, algorithmes parallèles, std::any, std::byte, std::filesystem, ressources mémoire std::pmr, etc.
    • Les algorithmes parallèles sont interdits en raison de l’absence de prise en charge dans libc++ et de craintes de conflit avec le modèle de threading de Chrome

Fonctionnalités autorisées et interdites de C++20

  • Fonctionnalités du langage autorisées :
    • concepts, consteval, designated initializers, l’opérateur spaceship, [[likely]], la syntaxe d’initialisation de range-for
  • Fonctionnalités de bibliothèque autorisées :
    • <bit>, <compare>, <concepts>, <numbers>, std::erase_if, std::ranges::subrange, std::to_underlying, etc.
  • Fonctionnalités interdites :
    • char8_t, modules, [[no_unique_address]], std::bit_cast, <span>, std::bind_front, std::ranges::view_interface
  • À examiner (TBD) : coroutine, <format>, <source_location>, std::u8string

Fonctionnalités autorisées et à examiner de C++23

  • Fonctionnalités du langage autorisées : #elifdef, if consteval, static operator
  • Fonctionnalités de bibliothèque autorisées : std::byteswap, std::basic_string::contains, std::to_underlying, extensions des algorithmes std::ranges
  • Fonctionnalités à examiner : std::expected, std::mdspan, std::generator, std::stacktrace, std::print, [[assume]], #warning, etc.

Politique pour la bibliothèque Abseil

  • Composants Abseil interdits :
    • absl::any, absl::optional, absl::StatusOr, absl::Span, absl::FunctionRef, absl::Mutex, absl::Time, absl::btree_*, etc.
    • La plupart sont remplacés par les implémentations du namespace base de Chromium (base::span, base::expected, base::Bind, etc.)
  • À examiner (TBD) : absl::linked_hash_set, absl::linked_hash_map

Sens général

  • Chromium n’accepte pas automatiquement les fonctionnalités du C++ standard et les applique de façon sélective selon des critères de stabilité de build, de sécurité, de performance et de cohérence du code
  • La plupart des fonctionnalités interdites le sont à cause de doublons d’implémentation (base::) ou de problèmes de toolchain et de compatibilité ABI
  • Ce guide sert de référentiel de gestion de la qualité du code C++ dans l’écosystème Chromium et constitue un document de référence indispensable pour la collaboration open source

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.