C++20 bekommt Ranges und Erweiterungen bei Concepts

Auf seinem bisher größten Treffen formte das Standardisierungskomitee zudem neue Study Groups für ML und Weiterbildung.

In Pocket speichern vorlesen Druckansicht 248 Kommentare lesen
Programmiersprache: Standardisierungs-Meeting bringt weitere Details für C++20
Lesezeit: 2 Min.
Von
  • Rainer Grimm

Das jüngste C++-Meeting im kalifornischen San Diego war aus mehreren Gründen besonders: Zum einen ist es eines der letzten Treffen, das sich mit den Features für C++20 beschäftigt, zum anderen war es die bisher größte Zusammenkunft des Standardkomitees. Mehr als 180 Teilnehmer waren gekommen, und 274 Proposals standen auf der Agenda.

Die neue Study Group SG20 (Education) setzt sich zum Ziel, Richtlinien für ein Curriculum zum Lehren von C++ zu definieren. Diese Richtlinien sollen verschiedene Kenntnisstände und Domänen berücksichtigen.

Diverse Study Groups (SG) behandelten die einzelnen Proposals

(Bild: ISO)

Concepts wurden bereits 2017 zum C++20-Standard hinzugefügt. Nach dem jüngsten Meeting lassen sich jetzt auch generische Funktionen ohne das Schlüsselwort template oder eckige Klammern definieren. Ein Ausdruck void f(Sortable auto x) deklariert in C++20 ein Funktions-Template, das von seinem Argument fordert, dass es das Concept Sortable umsetzt. Die Details zu der vereinfachten Syntax lassen sich im Proposal P1141R1 nachlesen.

Die größte Erweiterung, die das Treffen in San Diego mit sich brachte, ist die Ranges-Bibliothek. Sie erweitert den C++20-Standard rein quantitativ um 200 Seiten. Die Bibliothek erlaubt es, die Algorithmen der Standard Template Library direkt auf Containern auszuführen. Mit der Ranges Library unterstützt C++20 insbesondere neue Programmierkonzepte. So lassen sich die Algorithmen mit dem Pipe-Symbol ("|") einfach verknüpfen und die Auswertung kann "lazy" erfolgen.

Die folgenden Zeilen verwendete das even-Prädikat und die square-Funktion auf den Vektor ints:

vector<int> ints{0, 1, 2, 3, 4, 5};
auto even = [](int i){ return 0 == i % 2; };
auto square = [](int i) { return i * i; };
for (int i : ints | view::filter(even) | view::transform(square)) {
cout << i << ' '; // prints: 0 4 16
}

Executors, Module und Koroutinen haben nicht den Weg in den C++20-Standard gefunden. Alle drei Feature sind jedoch heiße Kandidaten darauf, mit dem nächsten Meeting in Kona im Februar 2019 Bestandteil von C++20 zu werden. Die Netzwerkbibliothek wird es dagegen definitiv nicht schaffen – sie ist auf C++23 verschoben.

Die Tabelle gibt einen Überblick über den Stand der Proposals und zeigt, dass die Netzwerkbibliothek auf C++23 verschoben ist.

(Bild: Herb Sutter)

Die weiteren Details zum Meeting lassen sich in Herb Sutters Trip-Report nachlesen. Den aktuellen Stand der Dinge zu C++20 gibt es auf GitHub.

Der Autor dieser Meldung hat zum Thema Ranges-Bibliothek vor zwei Jahren einen umfangreichen Beitrag veröffentlicht. (rme)