C++: Dokumentation: Die folgenreichste Programmiersprache der Welt
(herbsutter.com)- Eine Dokumentation zum 40-jährigen Bestehen von C++, die von den Anfängen bei Bell Labs über die weltweite Verbreitung bis zum heutigen Wachstum alles in einem Werk zusammenfasst; zu Wort kommen Personen, die an der Geschichte von C++, an der Standardisierung und am Tooling-Ökosystem beteiligt waren
- C++ entstand aus C with Classes, das Bjarne Stroustrup bei Bell Labs entwickelte, um die Hardware-Kontrolle von C mit der objektorientierten Abstraktion von Simula zu verbinden, und wuchs zu einer Sprache für effiziente Abstraktion in großen Systemen
- Die frühe Implementierung CFront übersetzte C++ in C-Code, sodass bestehende C-Infrastruktur und Bibliotheken unverändert weiterverwendet werden konnten; mit der wachsenden Nutzerzahl ab 1983 wurde Kompatibilität zur Kernaufgabe
- Die unter Druck von IBM, HP und Sun gestartete ANSI/ISO-Standardisierung verhinderte die Zersplitterung in herstellerspezifische Implementierungen; der Standard von 1997 umfasste namespace, exception, template und STL
- Anfang der 2000er kam der C++ winter durch Java und C#, den Dotcom-Crash und den rasanten Anstieg der CPU-Leistung; als um 2004 die Frequenzskalierung endete und Parallelität wichtiger wurde, leitete C++11 eine Renaissance ein
- Heute wird C++ bei CERN, in Games, im Finanzsektor, in CUDA-basierter AI und HPC sowie in Embedded-Systemen eingesetzt; Speichersicherheit, Komplexität, die Größe des Standardisierungsgremiums und fehlende Finanzierung bleiben zentrale Herausforderungen
C with Classes, entstanden bei Bell Labs
- C++ ist mehr als 40 Jahre alt, und als die Sprache entstand, gab es noch keine Tools wie Editorfunktionen, Syntax-Highlighting, Code-Navigation, Autovervollständigung oder Refactoring; viele Entwickler nutzten BASIC oder je nach Chip unterschiedliche Assemblersprachen
- In einer Zeit, in der größere und komplexere Programme nötig wurden, wollte Bjarne Stroustrup bei Bell Labs verteilte Systeme bauen, und dafür brauchte er eine Low-Level-Sprache, um Elemente wie Gerätetreiber, Netzwerkschnittstellen, Speicherverwaltung und Prozesse zu behandeln
- C bot vollständige Kontrolle über die Hardware und eignete sich für Systemprogrammierung, reichte aber mit wachsender Programmgröße nicht aus, um Strukturen wie Module, Kommunikationskanäle und Protokolle auszudrücken
- Stroustrup mochte an Simula, das er in Cambridge verwendet hatte, die starke Typsicherheit, benutzerdefinierte Typen, Klassen und Klassenhierarchien, hielt Simula aber für zu langsam und speicherhungrig
- Deshalb entwickelte er C with Classes, indem er Grundfunktionen von Simula in C einbrachte; in den folgenden fast 40 Jahren wurde C++ so weiterentwickelt, dass es alles leisten konnte, was Simula und C jeweils konnten
CFront, der Name und die frühe Verbreitung
- C with Classes entstand zunächst in Form eines C-Präprozessors; als andere es zu nutzen begannen, entschied Stroustrup, dass der Abstand zu C noch nicht groß genug sei, und investierte ein Jahr in die Verbesserung von Compiler und Sprache
- CFront erzeugte nicht wie ein traditionelles Backend direkt Maschinencode, sondern kompilierte nach C-Code, sodass C++-Nutzer nicht ihre gesamte Infrastruktur und alle Bibliotheken austauschen mussten, sondern in der bestehenden C-Umgebung bleiben konnten
- CFront wurde 1983 entwickelt und war ein echter Compiler, der lexikalische Analyse, Parsing, Typprüfung, die Erzeugung von Baumdarstellungen und Baumoptimierung ausführte
- Der Name C++ stammt daher, dass der
++-Operator in C eine Erhöhung bedeutet; semantisch wäre++Czwar korrekter, doch aus Gründen der Indizierung und Referenzierung wurde daraus C++ - AT&T versuchte beim Einstieg in das Computer- und Softwaregeschäft, C++-Compiler zu verkaufen, doch die Hardware verkaufte sich nicht gut genug; frühe C++-Implementierungen konnten dadurch faktisch breit verteilt werden, bei Kosten auf dem Niveau von Bandmaterial und sehr niedrigen kommerziellen Lizenzgebühren
- Stroustrup übernahm eine Zeit lang Dokumentation, Compiler, Sprachimplementierung und Helpdesk zugleich; die Investitionen von AT&T waren sehr gering, und einmal wurden für drei Jahre nur 5.000 Dollar für die Verbreitung einer allgemeinen Programmiersprache bereitgestellt
- In CFront 2.0 wurde ein Bug in der Behandlung von Mehrfachvererbung entdeckt; da bereits zugesagte Kernfunktionen im Feld auf eine nicht mehr reparierbare Weise hätten brechen können, wurde innerhalb weniger Tage eine korrigierte Fassung erstellt und verteilt
- Da dieselbe Release-Nummer beibehalten werden musste, wurde die Version als 2.0.0 statt 2.0.1 ausgeliefert, und Kompatibilität wurde zu einer so dominanten Anforderung, dass man sie scherzhaft als das „C-Wort“ bezeichnete
Standardisierung und STL
- C++ war zwar ein Werkzeug zur Steigerung der Produktivität innerhalb von AT&T, konnte aber nicht erfolgreich sein, wenn es in einem einzelnen Unternehmen eingeschlossen blieb; dafür brauchte es externe Entwickler und ein Bibliotheksökosystem
- Vor dem Web liefen Informationswege über Gruppen wie
comp.lang.c++im Usenet und Computermagazine wie Byte; Stroustrup machte die Sprache Ende der 1980er in Vorträgen bei vielen Unternehmen und Organisationen bekannt - Die Nutzung stieg auch ohne Werbekampagne oder starken Förderer, doch mehrere Anbieter wie Borland, Microsoft, IBM und Sun entwickelten jeweils eigene C++-Implementierungen und Template-Designs, wodurch die Code-Kompatibilität stark auseinanderlief
- Vertreter von IBM, HP und Sun forderten Stroustrup auf, C++ unter den ANSI-Regeln zu standardisieren; Stroustrup hielt das zunächst für verfrüht, entschied aber ein Jahr später, ein Basisdokument für die Standardisierung zu erstellen
- Das Annotated Reference Manual, kurz ARM, wurde zum Eingabedokument für die Standardisierung und führte in Richtung von Funktionen wie template, exception und namespace
- Der Standard wurde als Vertrag zwischen denen definiert, die C++-Code schreiben, und den C++-Implementierungen, damit verschiedene Anbieter denselben Code mit derselben Bedeutung annehmen
- Die von Alexander Stepanov entwickelte STL basierte auf der zentralen Idee, Algorithmen auf allen anwendbaren Datenstrukturen arbeiten zu lassen und Datenstrukturen so zu gestalten, dass sie untereinander Daten austauschen können
- Vor STL entwickelte jeder eigene Ansätze für array, list, tree, container und Algorithmen, doch STL bot einen einzigen leistungsfähigen Weg zur Definition von Algorithmen und Containern
- Der STL-Vorschlag stieß auf Widerstand, weil er im Zeitplan der Standardisierung als zu spät und zu groß galt; auch große Unternehmen wie Microsoft waren dagegen, doch nach Präsentationen und Diskussionen stimmten rund 80 % des Komitees zu, sodass STL in den Standard aufgenommen wurde
- C++ wurde im November 1997 standardisiert, und namespace, exception, template sowie die Standard Template Library kamen als zentrale Grundfunktionen hinzu
- LLVM entstand erst nach dieser Standardisierung und konnte neue Funktionen daher in der beabsichtigten Weise nutzen, ohne die Last einer Migration von Altsystemen
Der Winter und die C++11-Renaissance
- In den 1990er Jahren wurde C++ in Bereichen wie Hochenergiephysik-Software und Computing bei CERN zur Sprache, die die bis dahin Fortran-zentrierte Entwicklung ablöste; bestehende Bibliotheken und Code wurden nach C++ portiert oder für C++ neu erstellt
- In der Spieleentwicklung verlagerte sich vieles von C und Assembler zu C++, als Grafikkarten und APIs die Low-Level-Arbeit übernahmen; in Ökosystemen rund um Engines wie Unreal wurde C++ eingesetzt
- Im Finanzsektor wurden mit dem Aufkommen von algorithmischem Handel und High-Frequency-Trading Latenzen im Mikrosekundenbereich entscheidend, und C++ wurde als Sprache genutzt, mit der sich geringe Latenz erreichen ließ, ohne jede Zeile von Hand mikrozuoptimieren
- Mit dem Dotcom-Crash 2000 stieg Java dank des starken Marketings von Sun zur „Sprache der Zukunft“ und zur „Sprache des Internets“ auf; Java entstand ausdrücklich auch als Reaktion auf die Komplexität von C++
- Innerhalb von Microsoft gab es den Wunsch, die einfache formularbasierte Entwicklung von Visual Basic mit der Performance und Ausdrucksstärke von C++ zu verbinden; daraus entstand C#
- Zwischen 2000 und 2005 herrschte nicht bloß Stagnation, sondern ein tatsächlicher Niedergang von C++; in einer Zeit ständig steigender CPU-Frequenzen hielten viele Sprachdesigner und Entwickler Performance für weniger wichtig
- Um 2004 endete die Frequenzskalierung von Prozessoren, und mit den Leistungs- und Energiegrenzen einzelner Kerne sowie den abnehmenden Erträgen aus Instruktionsparallelität endete die Ära, in der Hardware Programme automatisch schneller machte
- Multi-Core und Parallelität wurden wichtig, doch der damalige C++-Standard enthielt überhaupt kein threading; Herb Sutters Mail „C++ multi-threading: is the standardization committee listening“ machte dieses Problem deutlich
- C++0X begann 2002 und sollte 2007 bis 2009 abgeschlossen sein, verzögerte sich aber immer wieder, weil weitere wichtige Funktionen aufgenommen werden sollten, und dauerte schließlich 13 Jahre
- C++11 führte move semantics, concurrency,
auto, range-based for loop, smart pointer, lambda undconstexprein und war der erste Standard in der C-Sprachfamilie, der threading offiziell behandelte - C++11 wurde zur Renaissance, weil der Bedarf an einfacheren und sichereren Sprachfunktionen mit der Notwendigkeit zusammenfiel, die Hardwareleistung bestmöglich auszunutzen
- Danach wurde ein train model eingeführt, bei dem Standards zu festen Zeitpunkten erscheinen; das Komitee entschied sich für einen Dreijahresrhythmus statt für zwei Jahre
- C++14 war ein kleines Release mit Punkten, die es nicht mehr in C++11 geschafft hatten, sowie mit Bugfixes; in C++17 und C++23 kamen viele weitere Sprach- und Standardbibliotheksfunktionen hinzu
Heutige Größenordnung und Herausforderungen
- Die Komplexität von C++ ist weiter gewachsen, und es gibt Kritik an den vielen Arten der Variableninitialisierung sowie scharfe Urteile wie „schwer verständliche Komplexität“
- Auch das Standardisierungskomitee ist gewachsen und umfasst inzwischen 527 Personen; es gibt die Sorge, dass nun so viele Komitees und Vorsitzende existieren wie zu Beginn überhaupt Mitglieder beteiligt waren
- Im Sprachdesign ist Hinzufügen möglich, Entfernen aber fast unmöglich; daher ist nicht nur wichtig, was aufgenommen wird, sondern vor allem, wann etwas abgelehnt werden muss
- C++ wird in der Stromerzeugung, in Windturbinen, Reiskochern, Bowlingbahnen, Hollywood-Filmen, Autos, im Finanzsektor, in Kameras und an vielen anderen Orten eingesetzt; es fällt die Formulierung, C++ sei „ungefähr überall“
- Die C++-Codebasis von HRT umfasst mehr als 1 Million Zeilen in 15.000 Dateien, und allein im Jahr 2025 erzeugten rund 800 Entwickler etwa 84.000 Commits
- In Games nutzt Unity C#, während Unreal C++ verwendet; Spiele wie Call of Duty mit hohen Frameraten und schneller Grafik setzen aus Geschwindigkeitsgründen auf C++
- Auch bei Nvidia und im Bereich Accelerated Computing ist C++ wichtig; selbst wenn an der Oberfläche Python genutzt wird, wird die eigentliche Rechenlast von hochoptimierten CUDA-Bibliotheken getragen
- Als schnell wachsende Sprachen wurden Rust und C++ genannt; die Zahl der C++-Entwickler sei von 9,4 Millionen im Jahr 2022 auf 16,3 Millionen im Jahr 2025 gestiegen
- Die Nachfrage nach Sprachen, bei denen Energieeffizienz im Verhältnis zur Performance wichtig ist, bleibt bestehen, und C++ sichert sich dadurch Einsatzbereiche, in denen es stark und schwer zu ersetzen ist
- Gleichzeitig besteht die Sorge, dass große Player mit ihrem Fokus auf AI weniger Mittel für C++ bereitstellen könnten
- Während der Pandemie gab es bei Regierungen und Aufsichtsbehörden Bestrebungen, sich von C++ abzuwenden, weil es Speichersicherheit nicht standardmäßig bietet; Speichersicherheit wird als das wichtigste zu lösende Problem dargestellt
- In C++26 soll im Sinne robusterer Software eine nicht initialisierte Variable nicht mehr als undefined behavior gelten, und die C++26-Standardbibliothek soll für verbreitete Typen wie
string,spanundvectorOptionen für bounds safety bieten - Static reflection in C++26 ist eine Funktion, mit der Programmcode anderen Programmcode betrachten kann, und sie wird als die einflussreichste einzelne standardisierte Funktion überhaupt eingeschätzt
- AI könnte Sprachsicherheit und die Art, wie Programmiersprachen genutzt werden, stark beeinflussen, doch was genau geschieht, bleibt vorerst offen
1 Kommentare
Hacker-News-Kommentare
Die Kritik von Ken Thompson an C++ als inkonsistenter Haufen komplexer Ideen hallt bei mir bis heute nach. Das letzte Mal beruflich genutzt habe ich C++98; 11/17/20 habe ich nur aus Neugier ein wenig ausprobiert
Ich bezweifle, dass c++/cfront sich so weit verbreitet hätte, wenn es nicht vom Glanz von C profitiert hätte, und ich denke, genau das war zugleich seine Identität und eine Grenze, die C++ nie zu ändern versuchte. Es nervt ungemein, ähnlich viel Zeit darauf zu verwenden, Implementierungen mit Tools wie Coverity/Valgrind zu säubern, obwohl der Compiler das hätte erledigen können
Zu C++98-Zeiten konnte man mit Bjarnes Buch über die interne Struktur noch ziemlich gut verstehen, was vor sich ging, aber danach wuchsen Bücher der Sorte „effective, more effective, proficient, performant C++“ zu einer eigenen Industrie an, sodass man bis zum Aufkommen von LLMs die Hoffnung aufgeben musste, bestehenden Code anderer Leute wirklich verstehen zu können. Ich war zufriedener damit, die Zeit lieber in das Erlernen der Problemdomäne zu investieren
Trotzdem werde ich mir die Doku ansehen, schon weil Leute wie Kernighan und Stepanov vorkommen, die ich sehr mag
Ich fragte, ob man für einen C++-Compiler eine Lizenz brauche und ob man ihn anders als C++ nennen müsse. Er lachte nur und sagte, ich könne machen, was ich wolle, und bedankte sich sogar dafür, dass ich gefragt hatte, weil ich der einzige Compiler-Mensch gewesen sei, der das getan habe. Vor ein paar Jahren habe ich seinen Nachruf gesehen; er war ein guter Typ
Das Kompilieren war quälend langsam, und near-/far-Pointer, die für jede nichttriviale App unverzichtbar waren, wurden nicht unterstützt. Zortech C++ löste diese Probleme, verkaufte sich wie verrückt und schuf die kritische Masse, die C++ für seinen Erfolg brauchte
Der Traffic auf comp.lang.c++ nahm sprunghaft zu, und Borland sah unsere Verkaufszahlen, gab sein eigenes objektorientiertes Sprachprodukt auf und entwickelte stattdessen Turbo C++. Microsoft sah wiederum den Erfolg von Borland und baute daraufhin sein eigenes C++
Wir verkauften auch viele Zortech-C++-Compiler an Microsoft, und sie entwickelten damit COM. Ich hörte auch Gerüchte, Microsoft arbeite an einem eigenen objektorientierten C namens C*, bestätigt habe ich das aber nie
Einer der Gründe, warum das C-Komitee so lange durchhalten konnte, ohne viel hinzuzufügen, war, dass es auf C++ zeigen und sagen konnte: „Das ist deren Baustelle, nicht unsere.“ Ohne C++ wäre C womöglich zu irgendeiner Sprache mit Klassen, Templates und Lambdas geworden
Das von ihnen geschaffene C und UNIX besiegten schließlich auch weiter entwickelte LISP- und Smalltalk-Systeme, weil sie einfacher zu implementieren waren. Sogar ihr eigenes, weiter entwickeltes Plan-9-basiertes Betriebssystem konnte die bereits weiter verbreiteten Unix-artigen Systeme nicht verdrängen
Am Ende gewinnen offenbar immer Verbreitungskraft und „gut genug“. Ich denke, dynamische Sprachen wie Perl, Python, Ruby, JavaScript und PHP sowie das stark vermarktete Java boten ausreichend gute High-Level-Features, sodass die Leute nicht zu Lisp und Smalltalk gingen
Aus dieser Perspektive könnte C++ das Mittel gewesen sein, High-Level-Features auf eine breit eingesetzte Low-Level-Hochleistungssprache zu setzen und sie damit zu einer Technologie zu machen, die für breite Akzeptanz gut genug war
Ich arbeite derzeit viel mit C++, also habe ich beschlossen, mir das Video anzusehen, während ich darauf warte, dass der Build fertig wird. Die Länge passte perfekt, und glücklicherweise war das Video auch sehr gut
Für mich persönlich ist C++ nach rund 15 Jahren Nutzung die eleganteste Sprache, mit der ich gearbeitet habe. Wenn man eher der Typ „Systematisierer“ ist und ein extrem präzises mentales Modell von allem haben möchte, was man schreibt, bis hinunter zum letzten Bit, dann gibt es kaum etwas Besseres als C++
Ich erkenne die Einschränkungen und Unsicherheiten an, die etwa vom Compiler kommen, aber sehe es trotzdem so
Natürlich kann man gern mit C++ arbeiten, und natürlich kann man mit C++ viel erreichen, aber dass C++ das mit „sehr wenig“ schafft, dürfte wohl kaum unumstritten sein
Ich freue mich, dass Andrei Alexandrescu in dieser Dokumentation vorkommt. Sein Modern C++ Design war, als ich es gelesen habe, ein Buch, das mein Denken regelrecht geöffnet hat, und das könnte es noch immer. Hat es hier jemand gelesen?
Ich würde empfehlen, jedes Kapitel von einem AI-Chatbot zusammenfassen zu lassen und zu fragen, was heute die modernen Entsprechungen sind. Einige Idiome wurden inzwischen verbessert, und ein ganzer Abschnitt schien durch die Verwendung von std::variant und std::visit ersetzt worden zu sein
C++ sollte verschwinden. Ich verstehe, dass viele Menschen investiert haben und dass enorm viel Code in C++ geschrieben wurde. Früher war ich Fan, und es ist auch heute noch meine wichtigste Arbeitssprache, aber in einer Situation, in der LLMs 2026 alle Schwachstellen finden können und auch die Zahl der Angreifer steigt, brauchen wir eine Sprache, bei der Sicherheit der Standard ist
Bei C++ muss man Sicherheit optional aktivieren und dabei extrem wachsam sein. Das funktioniert nicht, und jahrzehntelange Erfahrung beweist das
shared_ptr, die in C++11 dazukamen, zeigte sich auch, wie stark man die Sprache noch verändern konnteFast jede Idee wurde aufgenommen, und man hat gelernt, was sich im Feldeinsatz bewährt und was nicht. RAII, die Unterscheidung zwischen Move und Copy, Smart Pointer, Placement New und Generics kann man behalten
auto_ptr, implizites Kopieren, bestimmte Arten der Ausnahmebehandlung, multiple virtuelle Vererbung und Templates, die ganzen Code ersetzen, kann man dagegen verwerfen. Meiner Meinung nach ist der Kampf entschieden, und Rust ist das beste Ergebnis, das die funktionierenden Dinge zusammenfasst. Dass es sogar die Compile-Zeiten geerbt hat, gibt’s gratis dazuIch finde es erstaunlich, dass der C++-Entwicklungsstrom weitergeht. Wenn ein Spiel oder Programm in C++ geschrieben ist, ist das meist gut, weil Leistung in der Regel weitgehend gesichert ist, aber wenn man mich bitten würde, selbst direkt C++ zu schreiben, würde ich wohl heulen
Man muss sich viel zu viel merken, und die Standards sind zu vielfältig. Wenn ich in ein Projekt zur Wartung gehe und es ist C++, sinkt meine Energie sofort. Es ist einfach zu schwer. Wenn andere es für mich schreiben, ist das gut, aber eine Sprache, die ich selbst schreiben möchte, ist es nicht
Dieses Aufwärmen braucht man in irgendeiner Form bei jeder Sprache, daher unterscheidet es sich für mich nicht stark davon, Python, Go oder Java zu verwenden
Ohne die Standardbibliothek ist C++ eigentlich ganz okay
Das Hauptproblem des C++-Ökosystems ist, dass sich alle ihre eigene Teilmenge der Sprache zurechtschnitzen. Dadurch gibt es nicht ein einziges Ökosystem, sondern mehrere, mit einander widersprechenden Stilen und unterschiedlichen Teilmengen von Sprache und Standardbibliothek. Das macht Code-Wiederverwendung über Bibliotheken unnötig schwierig
[0] https://hftuniversity.com/post/the-c-standard-library-has-be...
Der große Vorteil dieses breiten Feature-Sets ist, dass C++ gute Abstraktionen von sehr Low-Level bis sehr High-Level erlaubt. Inline-Assembly, Bit-Operationen und direkte Speicher-Manipulation sind ebenso möglich wie ein fast skriptsprachenartiger High-Level-Stil. Was auch immer der Problembereich verlangt, C++ kann es abdecken
Zusätzlich würde ich angesichts der Profilinformationen sagen: Wenn du nicht in Nordkorea bist, solltest du bei deinem Satz wohl noch eine Null anhängen. So bekommst du eher langfristige Kunden mit höherem Qualitätsanspruch
Genau so fühlt es sich an, als C++-Programmierer zu leben
Wenn ich Webentwickler unterrichte, sage ich immer, dass die Sprache des Internets nicht JavaScript, sondern C++ ist. Webentwickler sind nur Benutzer, die innerhalb von Programmen spielen, die von C++-Entwicklern gebaut wurden
Was die Sprache des Internets ist, ist deutlich weniger klar
Kostenlose Dokumentationen zu Themen, für die ich brenne, sind wirklich großartig. Danke
Ich bin allerdings etwas eigen: Dokumentationen, die aus aneinandergereihten kurzen Aussagen von Menschen bestehen, kann ich nicht ansehen. Ich verstehe die Absicht, „die Leute ihre Geschichte erzählen zu lassen“, aber es ist für mich zu zerstreut, deshalb brauche ich einen Erzähler, der mir sagt, woran ich denken soll
Trotzdem sende ich den Machern meine Zuneigung
Ich habe die aktuellen Entwicklungen verpasst, aber kürzlich gab es Dokumentationen zu Python, Clojure und wahrscheinlich auch zu anderen Sprachen. Machen dieselben Leute eine Reihe über mehrere Sprachen? Ist das Zufall? Oder ist es jetzt ein Trend, dass jede Programmiersprache ihre eigene Video-Dokumentation bekommen will?
Sie scheinen Dokumentationen über Open-Source-Software zu machen
Chandler Carruth hat dazu ein paar interessante Gedanken: https://hachyderm.io/@chandlerc/116694268329657881
Erst in den letzten 10 Minuten wurden gängige Kritikpunkte wie zunehmende Komplexität oder Memory Safety kurz angesprochen. Trotzdem habe ich es gern gesehen