Bjarne Stroustrup: Jeder C++-Standard ist eine Momentaufnahme
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".
- 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.
- 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.
- 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