- Der nächste C++-Standard als Nachfolger von C++20
- Kein Game Changer wie C++98, C++11 oder C++20, sondern eher eine kleinere Veränderung auf dem Niveau von C++17
Die Entwicklung des C++-Standards über (40 Jahre) im Überblick
C++98
- Ende der 1980er schrieben Bjarne Stroustrup und Margaret A. Ellis das bekannte Buch Annotated C++ Reference Manual (ARM)
- Dieses Buch verfolgte zwei Ziele
- Da es zu viele unabhängige C++-Implementierungen gab, definierte ARM die Funktionen von C++
- Es wurde zur Grundlage des C++-Standards C++98 (ISO/IEC 14882)
- C++98 enthielt einige wichtige Funktionen
- Templates
- STL (Standard Template Library): einschließlich Containern, Algorithmen, Strings und IO-Streams
C++03
- In C++03 (14882:2003) wurden nur sehr kleine technische Korrekturen vorgenommen
- In der Community werden C++03 zusammen mit C++98 oft als „Legacy C++“ bezeichnet
TR1
- 2005 geschah etwas Interessantes: TR1 (Technical Report 1) wurde veröffentlicht
- TR1 war ein großer Schritt in Richtung C++11 und der erste Schritt zu Modern C++
- Es basierte auf dem Boost-Projekt von Mitgliedern des C++-Standardisierungsgremiums
- Es enthielt 13 Bibliotheken für den nächsten C++-Standard (reguläre Ausdrücke, Zufallszahlen, Smart Pointer wie
std::shard_ptr, Hashtabellen usw.)
C++11
- Es war der nächste C++-Standard, wir nennen ihn jedoch Modern C++. Dieser Begriff umfasst auch C++14 und C++17
- C++11 veränderte die Art, wie wir C++ entwickeln, grundlegend
- Neben den Komponenten aus TR1 brachte es move semantics, perfect forwarding, variadic templates, constexpr usw.
- Enthalten waren außerdem ein speicherbezogenes Modell für Multithreading und eine Threading-API
C++14
- Ein kleiner C++-Standard. Er führte read-writer locks sowie verallgemeinerte Lambdas und constexpr-Funktionen ein
C++17
- Weder groß noch klein
- Enthält zwei herausragende Funktionen: Parallel STL und ein standardisiertes Dateisystem
- Etwa 80 STL-Algorithmen können über Ausführungsrichtlinien ausgeführt werden (parallel, sequenziell, Vektor)
- Stark von Boost beeinflusst. Dazu gehören das Dateisystem und drei Datentypen (
std::optional, std::variant, std::any)
C++20
- C++20 hat, ähnlich wie C++11, die Art verändert, wie wir C++ programmieren
- Besonders vier große Punkte
- Ranges: Mit der Ranges-Bibliothek lassen sich Algorithmen direkt auf Containern ausdrücken und per Pipe-Symbol kombinieren, um sie auf unendliche Datenströme anzuwenden
- Coroutines: Machen asynchrone Programmierung in C++ zum Mainstream. Sie bilden die Grundlage für kooperative Abläufe, Event-Loops, unendliche Datenströme und Pipelines
- Concepts: Verändern die Art, wie wir über Templates nachdenken und mit ihnen programmieren. Sie ermöglichen Einschränkungen für Template-Argumente, Typprüfungen usw., die bereits zur Compile-Zeit überprüft werden können
- Modules: Helfen, die Grenzen von Header-Dateien zu überwinden. Sie versprechen vieles: etwa weniger Bedarf an Präprozessoren, letztlich kürzere Build-Zeiten und einfacheres Paket-Building
C++23
- Stand Juli 2023 steht C++23 kurz vor der finalen Abstimmung
- Hinzu kommt mit „Deducing this“ eine kleine, aber für die Sprache selbst sehr einflussreiche Funktion
- Ähnlich wie in Python kann der implizit an Member-Funktionen übergebene
this-Pointer explizit gemacht werden
- Dadurch lassen sich komplexe Techniken wie CRTP (Curiously Recurring Template Pattern) oder die Implementierung des Overload-Patterns vereinfachen
- Auch die C++23-Bibliothek enthält wichtige Ergänzungen
- Mit
import std; lässt sich die Standardbibliothek direkt importieren, und in std:print sowie std:println können C++20-Format-Strings verwendet werden
std::flat_map als performance-orientierter Ersatz für std::map
- Die
std::optional-Schnittstelle wird für bessere Composability zu einer monadischen Schnittstelle erweitert
- Der neue Datentyp
std::expected
- Der mehrdimensionale span
std::mdspan
std::generator, eine Coroutine zur Erzeugung von Zahlenströmen
2 Kommentare
Anscheinend gibt es noch keine Neuigkeiten zum Networking-Standard.
Ich glaube, dass auch beim nächsten Standard noch Unsicherheiten bestehen werden;;