C++20 als neuer großer Standard der Programmiersprache genehmigt

Zentrale neue Features wie Ranges, Coroutinen, Concepts und Module werden die Art und Weise ändern, wie Entwickler in modernem C++ programmieren.

Lesezeit: 2 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 338 Beiträge
Von
  • Rainer Grimm
  • Alexander Neumann

Der Entwurf zur Spezifizierung von C++20 (ISO/IEC 14882:2020) als nächster maßgeblicher Standard der Programmiersprache C++ ist übers Wochenende ratifiziert worden. Er bringt bedeutende Neuerungen für Entwickler mit. Wie C++11, der letzte große Standard der Sprache – C++14 und C++17 gelten nur als Zwischenschritte –, wird C++20 die Art und Weise ändern, wie Entwickler in modernem C++ programmieren – das gilt vor allem für die vier Kernneuerungen Ranges, Coroutinen, Concepts und Module.

Außerdem gibt es Neuerungen bei zahlreichen Features, die die Kernsprache, die Bibliothek und die Concurrency betreffen: etwa den Drei-Wege-Vergleichsoperator (<=>), Überarbeitungen an den Lambda-Funktionen und Templates, eine Kalender- und eine Formatierungsbibliothek, Semaphoren und ein verbesserter Umgang mit Thread, der sich unterbrechen lässt.

Concepts sind eine Erweiterung der Templates von C++, mit denen sich semantische Kategorien für die Menge der zulässigen Datentypen definieren lassen. Dank Concepts wird das Anwenden und Definieren von Templates deutlich einfacher und ausdrucksreicher. Die Ranges-Bibliothek erlaubt es, die Algorithmen der Standard Template Library direkt auf den Containern der STL anzuwenden, diese mit dem aus der Unix-Shell bekannten Pipe-Operator zu verknüpfen und auf unendlichen Datenströmen zu definieren.

Mit Coroutinen unterstützt C++20 die asynchrone Programmierung. Damit sollen sich kooperatives Multitasking, unendliche Datenströme, Eventschleifen oder auch Pipelines elegant umsetzen lassen. Sie sind verallgemeinerte Funktionen, die ihre Ausführung anhalten und wieder aufnehmen können. Dabei behalten sie ihren Zustand. Coroutinen stellen die typische Art dar, eventgetriebene Applikationen zu schreiben. Tatsächlich enthält C++20 keine konkreten Coroutinen, sondern ein Framework für das Schreiben von Coroutinen. Es besteht aus mehr als zwanzig Funktionen, die teilweise implementiert werden müssen oder können.

Deep-Dive in C++20

Wer sich schon jetzt schlau machen möchte, was bei C++20 alles passiert ist, dem seien Rainer Grimms Blog-Beiträge zu den Neuerungen auf heise Developer ans Herz gelegt. Der C++-Experte hat sich seit rund einem Jahr wöchentlich mit den Veränderungen befasst, die mit C++20 einhergehen. Die Redaktion von heise Developer ist außerdem gerade dabei, ein Sonderheft zum neuen Standard fertigzustellen, das ab 28. September am Kiosk zu erstehen sein wird. Die digitale Ausgabe wird kurz vorher über den heise shop verfügbar sein.

Module stellen gegenüber Header-Dateien eine deutliche Verbesserung dar: Sie garantieren schnellere Kompilierungszeiten, da sie ein wiederholtes Ersetzen (wie es bei den Header-Dateien notwendig ist) überflüssig machen. Mit Modulen können Entwickler Präprozessor-Makros isolieren. Damit ist die Reihenfolge, in der man Header-Dateien inkludiert, nicht mehr entscheidend. Module drücken die logische Struktur des Codes aus und erlauben es, neue Modulpakete aus bestehenden Modulen zusammenzustellen. Die Notwendigkeit, auf fehleranfällige Makro-Tricks zurückzugreifen, entfällt dabei, und Verletzungen der One Definition Rule (ODR) gehören der Vergangenheit an.

Ein offizielles Statement zur Genehmigung des Standards steht bislang aus. Dass der ISO-Standard abgesegnet wurde, legt Patrice Roys kurzes Statement auf Twitter nahe: "C++20 has been approved!" Roy ist Teil des C++-Standardisierungskomitees.

[Update, 07.09., 08:00: Mittlerweile hat sich auch Herb Sutter, Vorsitzender des ISO-C++-Standardisierungskomitees, via Blog gemeldet. Er konkretisiert Roys Statement: "Am Freitag, den 4. September, endete die DIS-Abstimmung (Draft International Standard) von C++20, und sie wurde einstimmig angenommen. Das bedeutet, dass C++20 nun die endgültige technische Genehmigung erhalten hat und damit der ISO-Abstimmungsprozess abgeschlossen ist, und wir erwarten, dass der Standard gegen Ende des Jahres 2020 formell veröffentlicht wird, nachdem wir eine letzte Runde der ISO-Redaktionsarbeit abgeschlossen haben."]

(ane)