13 Punkte von xguru 2023-07-13 | 2 Kommentare | Auf WhatsApp teilen
  • 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

 
carnoxen 2023-07-13

Anscheinend gibt es noch keine Neuigkeiten zum Networking-Standard.

 
penza1 2023-07-20

Ich glaube, dass auch beim nächsten Standard noch Unsicherheiten bestehen werden;;