15 Punkte von GN⁺ 2026-01-26 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Das Chromium-Projekt definiert den Einsatzbereich und die verbotenen Elemente moderner C++-Standardfunktionen klar, um Code-Konsistenz und Sicherheit zu gewährleisten
  • Für C++11 bis C++23 wird pro Standard zwischen erlaubt, verboten und in Prüfung (TBD) unterschieden; für die Abseil-Bibliothek gelten dieselben Kriterien
  • Zu den verbotenen Funktionen gehören std::shared_ptr, std::function, std::regex, std::filesystem, std::byte, char8_t, modules
  • Erlaubte Funktionen sind unter anderem concepts, der Spaceship-Operator, designated initializer, std::to_underlying, std::ranges-Algorithmen
  • Dieser Leitfaden gilt für Chromium und alle Unterprojekte und dient als zentraler Maßstab zur Sicherstellung von Code-Stabilität und Build-Kompatibilität

Richtlinie für den Einsatz von Modern C++ in Chromium

  • Chromium übernimmt neue C++-Standards nicht sofort, sondern markiert sie erst dann als anfänglich unterstützt (initially supported), wenn die Toolchain-Unterstützung ausreichend gesichert ist
    • Danach werden einzelne Funktionen als erlaubt (allowed), verboten (banned) oder in Prüfung (TBD) eingestuft
  • Änderungen am Status neuer Funktionen können über die Mailingliste cxx@chromium.org vorgeschlagen werden
  • Zwei Jahre nach der anfänglichen Unterstützung werden Funktionen nach ausdrücklicher Prüfung in die Liste der erlaubten oder verbotenen Elemente verschoben

Verbotene Funktionen in C++11

  • Sprachfunktionen: inline namespace, long long, benutzerdefinierte Literale (user-defined literals)
  • Bibliotheksfunktionen: <chrono>, <regex>, <random>-Engines, <exception>, <ratio>, <thread> usw.
    • Ausnahmen (exceptions) sind vollständig deaktiviert; nur noexcept ist erlaubt
    • Anstelle von std::bind, std::function, std::shared_ptr, std::weak_ptr werden base::Bind, base::Callback, base::RefCounted verwendet

Verbotene Funktionen in C++17

  • UTF-8-Zeichenliterale (u8) sind verboten, wegen Kompatibilitätsproblemen mit char8_t
  • Verbotene Bibliothekselemente:
    • mathematische Spezialfunktionen, parallele Algorithmen (parallel algorithms), std::any, std::byte, std::filesystem, std::pmr-Speicherressourcen usw.
    • Parallele Algorithmen sind wegen fehlender Unterstützung in libc++ und möglicher Konflikte mit dem Threading-Modell von Chrome verboten

Erlaubte und verbotene Funktionen in C++20

  • Erlaubte Sprachfunktionen:
    • concepts, consteval, designated initializers, der Spaceship-Operator, [[likely]], Initialisierung in range-for-Anweisungen
  • Erlaubte Bibliotheksfunktionen:
    • <bit>, <compare>, <concepts>, <numbers>, std::erase_if, std::ranges::subrange, std::to_underlying usw.
  • Verbotene Funktionen:
    • char8_t, modules, [[no_unique_address]], std::bit_cast, <span>, std::bind_front, std::ranges::view_interface
  • In Prüfung (TBD): coroutine, <format>, <source_location>, std::u8string

Erlaubte und in Prüfung befindliche Funktionen in C++23

  • Erlaubte Sprachfunktionen: #elifdef, if consteval, statischer Operator (static operator)
  • Erlaubte Bibliotheksfunktionen: std::byteswap, std::basic_string::contains, std::to_underlying, erweiterte std::ranges-Algorithmen
  • In Prüfung befindliche Funktionen: std::expected, std::mdspan, std::generator, std::stacktrace, std::print, [[assume]], #warning usw.

Richtlinie für die Abseil-Bibliothek

  • Verbotene Abseil-Komponenten:
    • absl::any, absl::optional, absl::StatusOr, absl::Span, absl::FunctionRef, absl::Mutex, absl::Time, absl::btree_* usw.
    • Die meisten davon werden durch Implementierungen im base-Namespace von Chromium ersetzt (base::span, base::expected, base::Bind usw.)
  • In Prüfung (TBD): absl::linked_hash_set, absl::linked_hash_map

Gesamtbedeutung

  • Chromium übernimmt Standard-C++-Funktionen nicht pauschal, sondern wählt sie anhand von Build-Stabilität, Sicherheit, Performance und Code-Konsistenz aus
  • Die meisten verbotenen Funktionen sind entweder auf doppelte Implementierungen (base::) oder auf Probleme mit Toolchain- bzw. ABI-Kompatibilität zurückzuführen
  • Dieser Leitfaden fungiert als Qualitätsmaßstab für C++-Code im Chromium-Ökosystem und ist bei der Open-Source-Zusammenarbeit ein unverzichtbares Referenzdokument

Noch keine Kommentare.

Noch keine Kommentare.