Bjarne Stroustrup: Jeder C++-Standard ist eine Momentaufnahme

Seite 2: Concepts werden Typen und Klassenhierarchien ersetzen

Inhaltsverzeichnis

Also steckten ich und ein paar Freunde von mir es uns als Ziel, auch den dritten Wunsch zu erfüllen, die Spezifikation der Anforderungen eines Templates für seine Argumente. Alexander Stepanov, der Vater des generischen Programmierens im C++-Stil, taufte solche Spezifikationen „Concepts“. Sie sind im Grunde nur Prädikatlogik erster Ordnung, was es einfach macht, sie zu verwenden und über sie nachzudenken, während sie zugleich extrem flexibel sind. Sie gehen nicht zu Lasten der Runtime. Im Laufe der nächsten paar Jahre werden wir erleben, dass Concepts die Typen und Klassenhierarchien, welche bisher hauptsächlich zum Spezifizieren von Funktionsargumenten dienten, langsam ersetzen. Eines Tages werden wir uns wundern, wie wir es jemals ohne sie geschafft haben. Das wird dann so sein, wie wenn wir heute auf sehr frühen C-Code zurückschauen.

Bjarne Stroustrup live am 21. Januar 2021

(Bild: cpp.bettercode.eu)

  • Am 21. Januar 2021 ist Bjarne Stroustrup aus New York zugeschaltet bei einer Online-Konferenz zu C++20 und diskutiert live mit dem Publikum. Informationen zum Programm lassen sich der Website entnehmen.

Coroutinen werden uns davon befreien, dort Zustandsfunktionen ausdrücklich zu speichern, wo der nächste Wert von vorherigen Aufrufen abhängt. Solche Berechnungen sind sehr verbreitet im nebenläufigen Programmieren, und ich erwarte, dass Coroutinen den Weg, wie wir viele nebenläufige Systeme organisieren, drastisch vereinfachen. Mit der Einfachheit geht Effizienz in Zeit und Raum einher. Das ist wichtig, weil einige nebenläufige Systeme Hunderttausenden von Aufgaben dienen.

Coroutinen waren Teil des frühesten C++. In der Tat war die erste C++-Library eine Coroutinen-Bibliothek mit einer gewissen Unterstützung für Simulation im Simula-Stil. Das war grundlegend für die frühe Aufnahme und Verbreitung von C++. Ohne Coroutinen würden wir nicht von modernem C++ sprechen. Leider haben wir sie in den frühen 1990er-Jahren verloren, als komplexere Maschinenarchitekturen es schwieriger machten, Coroutinen gut zu implementieren.

Diese drei Features werden in meinem Buch von 1994, „The Design and Evolution of C++“, erwähnt und waren von Anfang an Teil meines Traums von C++ [1]. Ich bin sehr glücklich, einer von denen zu sein, die diesen Traum wahr gemacht haben. Diese drei Merkmale sind nicht nur Ergänzungen zu früheren Eigenschaften, sondern tief in dem, was C++ ist, verwurzelt. Sie beziehen sich auf die Organisation des Codes, das Typensystem und die Verwendung von Hardwareressourcen.

Um mehr über die Ziele, das Design und die Evolution von C++ zu erfahren, empfehle ich meine drei Aufsätze für die „History of Programming Languages“-Konferenzen (HOPL) von ACM SIGPLAN [2, 3], besonders mein Beitrag zur letzten Ausgabe: „Thriving in a crowded and changing world: C++ 2006-2020“. Ein riesiges Thema, das Paper dazu ist allerdings keine leichte Kost.

heise Developer: Was könnten deiner Meinung nach mögliche Hürden sein beim Umstieg auf C++20?

Stroustrup: Es gibt nur ganz wenige Hindernisse beim Wechsel von C++11, C++14 oder C++17 zu C++20. Die Sprache, die Standardbibliotheken und die großen Implementierungen sind ausgesprochen kompatibel. Aber denkt daran, dass C++20 noch nicht offiziell ist, deshalb sind alle, die die C++20-Switches auf die Implementierungen anwenden, bevor diese Implementierungen volle Unterstützung für C++20 versprechen … all jene gehen als Vorreiter ein gewisses Risiko ein. In der Praxis erfordert das Nutzen der neuen Funktionalitäten eine gewisse Lernbereitschaft und eine Neustrukturierung des Codes, besonders für die Module: Zurzeit verwenden wie Header-Dateien und #include, in der Zukunft werden wir Module schreiben und Statements importieren.