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

Dr. Bjarne Stroustrup hÀlt eine Vorlesung an der Shanghai Jiao Tong University (2014)
(Bild: Bjarne Stroustrup)
Im GesprĂ€ch mit heise Developer erzĂ€hlt der Vater von C++, welche neuen Features von C++20 fĂŒr Entwickler langfristig bedeutend sind und wo die Reise hingeht.
Als Vater der Programmierspache C++ hat Bjarne Stroustrup einige BerĂŒhmtheit erlangt; auch heutzutage noch ist er an der Standardisierung von C++ beteiligt. Im GesprĂ€ch mit heise Developer erklĂ€rt Stroustrup, was bei C++20 fĂŒr Entwickler langfristig Bedeutung haben wird und wie die weitere Zukunft der Programmiersprache aussieht.
heise Developer: Welche neuen Features aus C++20 werden langfristig am meisten Bedeutung fĂŒr C++ haben und wieso?
Dr. Bjarne Stroustrup: Module, Concepts und Coroutinen.
Module werden uns endlich bessere Code-Hygiene bringen (weniger Makro-Verschmutzung), die einfachere Zusammenstellung von Code aus Libraries und viel schnellere Kompilierung. Ich freue mich auf reife Modulimplementierungen, die sich gut in die Umgebung der Programmentwicklung allgemein integrieren lassen. Das wird Zeit brauchen.
Bitte seid euch darĂŒber bewusst, dass C++20 jetzt noch einige Monate lang nicht offiziell sein wird, bis das ISO-Sekretariat in Genf seine nichttechnische Review abgeschlossen hat [Anm. Red.: das Interview stammt aus dem Sommer 2020]. Deshalb sollten wir uns zufrieden geben mit frĂŒhen Implementierungen und nicht zu ungeduldig sein bei Unvollkommenheiten. Wir mĂŒssen auch erst lernen, Module gut zu nutzen. Vieles von dem, was wir tun, ist durchsetzt von schlechten Angewohnheiten aus fast 50 Jahren von #include und #define. Nur weil der PrĂ€prozessor uns gelĂ€ufig ist, muss das nicht heiĂen, dass er auch einfach zu handhaben ist.
Concepts werden wohl generisches Programmieren stark dem annÀhern, was heute gewöhnliches Programmieren ist. Sie werden unseren Code deutlich flexibler machen, wiederverwendbar und effizient. Als ich die Templates entworfen habe, wollte ich drei Dinge:
- Expressiveness Generality, wobei âExpressivenessâ fĂŒr die FĂ€higkeit steht, eine Idee konzise und direkt auszudrĂŒcken. âGeneralityâ ist das Vermögen, das fĂŒr eine breite Spanne an Themen zu tun, statt nur einen vom Designer so vorgesehenen begrenzten Satz an Auswahlmöglichkeiten zu haben.
- UnĂŒbertroffene Effizienz.
- Type Checking als "prÀzise Spezifikation".

(Bild: Bjarne Stroustrup)
- Dr. Bjarne Stroustrup ist der Vater von C++. Der Mathematiker und promovierte Informatiker ist Technical Fellow in der Technologieabteilung bei Morgan Stanley in New York City und Gastprofessor an der Columbia University. Er ist Mitglied der US-amerikanischen National Academy of Engineering (NAE) und TrÀger des Charles-Stark-Draper-Preises.
- Seit ĂŒber 30 Jahren wirkt er im ISO-Standard-Komitee mit. Sein Ziel ist es, C++ zu einer stabilen, zeitgemĂ€Ăen Basis fĂŒr Softwareentwicklung "fĂŒr das echte Leben" zu machen.
Die ersten beiden habe ich hinbekommen, nicht aber den dritten Punkt. Das genĂŒgte, um generisches Programmieren und Metaprogrammieren mit Templates zu einem durchschlagenden Erfolg zu machen, aber es strapazierte die Möglichkeiten der Programmiersprache und ihre Implementierung ĂŒber ein vertretbares MaĂ hinaus. Der Umstand, dass vernĂŒnftige Leute bereit waren, diese Unvollkommenheiten zu ertragen, um die Vorteile zu erlangen, ist ein starkes Argument dafĂŒr, dass die grundlegenden Ideen von C++ gesund sind.
Concepts werden Typen und Klassenhierarchien ersetzen
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.

(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 [1].
Coroutinen waren Teil des frĂŒhesten C++
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â [2]. Ein riesiges Thema, das Paper dazu ist allerdings keine leichte Kost.
Kaum Hindernisse beim Wechsel ab C++11
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.
C++ wÀchst durch das Feedback von Nutzern
heise Developer: Welche Neuerungen haben es (noch) nicht in den neuen Standard geschafft?
Stroustrup: C++ wĂ€chst durch das Feedback von Nutzern und durch den Entwicklungskonsens des ISO-Standardkomitees. Niemand erhĂ€lt exakt das, was er will, und die Bestandteile brauchen Zeit, um zu reifen. Jeder neue Standard ist bloĂ eine Momentaufnahme in der Evolution von C++ hin zu einem besseren Werkzeug fĂŒr Softwareentwicklung in der realen Welt.
Meine persönlichen Ziele umfassen: einfache Dinge einfach zu machen (ohne komplizierte Dinge unmöglich oder unnötig schwer zu machen), Hardware gut nutzen, Typen- und Ressourcensicherheit, Zero-overhead Abstraction.

Restauriertes Kriegsschiff Vasa (gesunken 1628) im Vasa-Museum Stockholm
(Bild: Alexander Neumann)
- We often remind ourselves of the good ship Vasa. It was to be the pride of the Swedish navy and was built to be the biggest and most beautiful battleship ever. Unfortunately, to accommodate enough statues and guns it underwent major redesigns and extension during construction.
- The result was that it only made it half way across Stockholm harbor before a gust of wind blew it over and it sank killing about 50 people.
- It has been raised and you can now see it in a museum in Stockholm. It is a beauty to behold - far more beautiful at the time than its unextended first design and far more beautiful today than if it had suffered the usual fate of a 17th century battle ship -- but that is no consolation to its designer, builders, and intended users.
aus: Bjarne Stroustrup, How to Write a C++ Language Extension Proposal [3]
Ich bevorzuge Komponenten â ob groĂ oder klein, Sprache oder Bibliothek â mit Blick darauf, wie gut sie diese Ziele unterstĂŒtzen und wie sehr sie ihren Nutzern in Relation zu dem Aufwand dienen, sie einzufĂŒhren. Ihr könnt euch ĂŒber solche Ideen in den regelmĂ€Ăig erscheinenden Schriften der Lenkungsgruppe des Komitees informieren [4]. Unter vielen anderen Themen findet man darin auch eine Liste mit VerbesserungsvorschlĂ€gen.
Ich halte Ausschau nach groĂen Features, die etwas grundlegend einfacher machen, so wie ein vollstĂ€ndigeres Modell der Concurrency (Executors) [5], und nach Bibliothekskomponenten, die entweder grundlegend sind oder entscheidende UnterstĂŒtzung liefern fĂŒr eine bestimmte Art von Anwendung wie etwa Units, Sound und einfache Grafiken. AuĂerdem halte ich Ausschau nach kleinen Features, die die Notation vereinfachen oder es Programmierern ersparen, einfache, allgemein nĂŒtzliche Funktionen und Klassen per Hand zu schreiben.
Ich bin nicht fĂŒr eine Vielzahl kleinerer Komfortmerkmale mit begrenzter Anwendbarkeit, und sehe einen stetigen Strom von VorschlĂ€gen fĂŒr kleine FunktionalitĂ€ten, ohne die wir seit 40 Jahren glĂŒcklich leben. Jede einzelne wĂŒrde C++ nur ein wenig mehr KomplexitĂ€t verleihen, aber insgesamt wĂŒrden sie ein schreckliches Durcheinander verursachen. DarĂŒber habe ich eine Arbeit geschrieben: âErinnert euch an die Vasa!â [6].
Wir mĂŒssen geduldiger sein â Ausblick auf C++23
heise Developer: Worauf können Entwickler sich in C++23 freuen?
Stroustrup: Wir mĂŒssen geduldiger sein. COVID-19 verlangsamt die Arbeit des Komitees, so wie es viele andere Arbeiten drosselt. Ich hoffe auf Problembehebungen, ein paar Minor Features, âum C++20 abzurundenâ, und vielleicht auf einen oder mehrere der folgenden Punkte aus dem PrĂ€-Pandemie-Plan des Komitees fĂŒr C++23: Standard-Library-Module, BibliotheksunterstĂŒtzung fĂŒr Coroutinen, UnterstĂŒtzung der Networking-Bibliothek, Executors, funktionales Programmieren im Pattern-Matching-Stil, Static Reflection.
Die zitierten Passagen sind AuszĂŒge aus einem lĂ€ngeren Interview, nachzulesen im iX/Developer-Sonderheft "Modernes C++" [7]. Das GesprĂ€ch fĂŒhrten Silke Hahn und Madeleine Domogalla, Redakteurinnen von heise Developer.
- Bjarne Stroustrup; The Design and Evolution of C++; Addison Wesley 1994
- Bjarne Stroustrup; A History of C++: 1979-1991 [8] (1993); in: Proceedings of the Second ACM SIGPLAN Conference on History of Programming Languages; Association for Computing Machinery, S. 271-297
- Bjarne Stroustrup; Evolving a Language in and for the Real World: C++ 1991â2006 [9] (2007), in: Proceedings of the Third ACM SIGPLAN Conference on History of Programming Languages; Association for Computing Machinery, S. 1-59
(sih [10])
URL dieses Artikels:
https://www.heise.de/-5025244
Links in diesem Artikel:
[1] https://cpp.bettercode.eu/
[2] https://www.heise.de/news/Bjarne-Stroustrup-lotet-Werdegang-seiner-Programmiersprache-C-aus-4783463.html
[3] https://www.stroustrup.com/how-to-write-a-proposal.pdf
[4] http://open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2000r2.pdf
[5] http://open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1371r2.pdf
[6] https://stroustrup.com/P0977-remember-the-vasa.pdf
[7] https://shop.heise.de/ix-developer-modernes-c/PDF
[8] https://dl.acm.org/doi/10.1145/155360.155375
[9] https://dl.acm.org/doi/10.1145/1238844.1238848
[10] mailto:sih@ix.de
Copyright © 2021 Heise Medien