Programmiersprache: C++20 ist Feature Complete

In Köln haben die Teilnehmer des ISO C++ Meeting den C++-Draft freigegeben, der jedoch überraschend keine Contracts enthält.

In Pocket speichern vorlesen Druckansicht 523 Kommentare lesen
Programmiersprache: C++20 ist Feature Complete
Lesezeit: 4 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Am vergangenen Wochenende haben die Teilnehmer des ISO C++ Meeting in Köln den letzten Schliff am kommenden C++-Standard vorgenommen. C++20 gilt nun als Feature Complete. Die Teilnehmer haben während des Treffens noch einige Vorschläge aufgenommen, allerdings mit Contracts auch ein Feature verschoben, da es zum aktuellen Zeitpunkt zu viele Meinungsverschiedenheiten hinsichtlich des exakten Designs gab.

Nichtsdestotrotz bringt C++20 zahlreiche Neuerungen, darunter Module, Koroutinen, Concepts und Ranges mit. Über den Sommer läuft der sogenannte Committee Draft (CD), die internationale Abstimmung zur Freigabe. Die gesammelten Rückmeldungen fließen in den kommenden beiden Meetings in den für Februar geplanten endgültigen Text zur Standardisierung ein.

Angesichts der vielen Neuerungen, die es in den endgültigen Draft geschafft haben wiederholt Herb Sutter in seinem Trip-Report die Aussage, die bereits Bryce Adelstein Lelbach im Rahmen des im Februar auf Hawaii in Kona veranstalteten ISO-C++ Meetings geäußert hatte: "Dies ist das größte C++-Release seit C++11". Zu den wichtigen Features, über die heise Developer im Februar berichtet hat, gehören Module als Alternative zu Header-Dateien und Koroutinen für die asynchrone Programmierung. Letztere sind aus anderen Programmiersprachen bekannt und erlauben nicht blockierendes Multithreading.

Zum fünfzigjährigen Jubiläum gibt es einen Bezug zur Mondladung zu den C++20-Neuerungen: "Ein kleiner Schritt für WG21, ein großer Sprung für C++ weltweit".

(Bild: Herb Sutter)

Module sollen unter anderem das Schnüren von Paketen vereinfachen und die Trennung von Header- und Sourcecodedateien auflösen. Außerdem entfallen Präprozessor-Anweisungen und Abhängigkeiten von include-Anweisungen.

Beim Kölner ISO C++ Meeting haben die Teilnehmer unter anderem std::format zur Textformatierung in die C++-Standardbibliothek aufgenommen. Es soll analog zu Boost.Format und POSIX-Format-Strings die Einfachheit von printf mit der Typsicherheit von iostreams kombinieren, wobei es sich für jeden beliebigen string verwenden lässt.

Passend zum Jubliäum der Mondlandung erweitert der Entwurf den Einsatz des sogenannten Spaceship Operators <=>. Er vereint in einer Operation A <==> B die Unterscheidung, ob A < B, A > B oder A == B ist und war bereits 2017 in den Standard eingeflossen. Neu ist, dass er nun auch für die Standardbibliothek von C++ funktioniert.

Zu den weiteren Neuzugängen, die in Köln in C++20 eingeflossen sind, gehören constexpr INVOKE, constexpr std::vector und constexpr std::string. Außerdem hält das Konzept von Stop-Token und Joining Thread Einzug in den Standard.

Ursprünglich war vorgesehen, dass auch Kontrakte es in den Draft schaffen, die Rainer Grimm im Sommer 2018 ausführlich in seinem Blog auf heise Developer im Sommer 2018 vorgestellt hat. Sie stellen ein Interface für Softwarekomponenten dar, die jeweils eine Vor- und Nachbedingung sowie eine Zusicherung (Invariante) erfüllen müssen.

Eigentlich waren sich die Teilnehmer des ISO-C++-Sommer-Meetings in Rapperswil im Juli letzten Jahres sicher, dass sie Contracts in C++20 aufnehmen können, aber seitdem haben sich wohl Meinungsverschiedenheiten bezüglich des Designs aufgetan. Daher befürchteten die Gestalter des Standards, dass es nicht für einen im ISO/IEC-Leitfaden definierten Konsens ausreicht.

Allerdings steht die Aufnahme von Kontrakten in den Standard weit oben auf der Liste. Daher soll sich nun die neu gegründete Study Group for Contracts, SG21 mit John Spicer als Vorsitzenden intensiv um die Umsetzung kümmern.

Mit dem Start der Abstimmung liegt das Team im Plan. Inzwischen steht auch der Ort für das 2020.1-Meeting, das in Prag stattfinden wird.

(Bild: Herb Sutter)

Mehr Infos

Die Neuerungen in C++20 sind das Titelthema der kommenden iX 8/2019, die ab dem 25. Juli im Heise Shop als Heft und PDF sowie im gut sortierten Zeitschriftenhandel erhältlich ist.

Weitere Ergebnisse des Treffens in der Domstadt lassen sich Herb Sutters Blogbeitrag entnehmen. Mit seinen Worten hat der C++20-Adler nun Flügel, und die nächsten Schritten sind, ihn zu landen und heimzubringen. (rme)