Bjarne Stroustrup entwickelte C++ nicht, um C durch eine elegantere Theorie zu ersetzen. Er suchte ein Werkzeug, mit dem sich große Systeme beschreiben ließen, ohne die Kontrolle über Leistung, Speicher und Hardware zu verlieren.
Diese Spannung prägt C++ seit seinen Anfängen: Abstraktionen auf hohem Niveau anbieten und zugleich dort einsetzbar bleiben, wo jede Ressource zählt. Sie erklärt gleichermaßen die Langlebigkeit und Leistungsfähigkeit der Sprache wie ihren Ruf, komplex zu sein.
Das Problem großer, effizienter Programme
Bjarne Stroustrup wurde 1950 im dänischen Aarhus geboren. Er studierte Mathematik und Informatik an der Universität Aarhus und promovierte anschließend in Cambridge über verteilte Systeme.
Während dieser Arbeit nutzte er Simula, eine Pioniersprache für Klassen und objektorientierte Programmierung. Die Abstraktionen von Simula halfen ihm, Komponenten eines Systems darzustellen, doch die verfügbaren Werkzeuge lieferten nicht die erwartete Leistung. Für ein weiteres Experiment wechselte er zu BCPL, das näher an der Maschine lag, stellte aber fest, dass der Verlust an Abstraktion die Organisation des Programms erschwerte.
Daraus entstand seine Richtung: die Strukturierungsmechanismen von Simula mit dem Kompilierungsmodell und der Effizienz von C zu verbinden.
Von „C with Classes“ zu C++
Stroustrup kam 1979 zu den Bell Labs. Dort begann er mit C with Classes, einer Erweiterung von C um Klassen, Konstruktoren, Destruktoren, Zugriffskontrolle und strengere Typprüfung. Frühe Versionen wurden von einem Präprozessor namens Cfront in C übersetzt und anschließend mit vorhandenen Werkzeugen kompiliert.
C zu erweitern war eine pragmatische Entscheidung. In den Bell Labs gab es bereits Systeme, Bibliotheken und Entwickler mit C-Erfahrung. Die Kompatibilität erleichterte Experimente und Einführung. Sie übertrug jedoch auch Eigenschaften auf C++, die später schwer zu vereinfachen waren: dichte Syntax, implizite Konvertierungen und direkte Speicherverwaltung.
1983 erhielt die Sprache den Namen C++, eine Anspielung auf den Inkrementoperator von C. Virtuelle Funktionen ermöglichten dynamischen Polymorphismus, während Operatorüberladung benutzerdefinierte Typen ähnlich wie eingebaute Typen nutzbar machte. Die erste Ausgabe von The C++ Programming Language erschien 1985.
Abstraktion ohne aufgezwungene Kosten
Stroustrups zentrale Idee lautet nicht, dass jedes Programm objektorientiert sein müsse. C++ wurde schrittweise multiparadigmatisch: prozedurale Programmierung, Klassen, generische Programmierung, Funktionen und Berechnungen zur Übersetzungszeit können nebeneinander bestehen.
Sein Prinzip der „Zero-overhead abstractions“ lässt sich in zwei Regeln fassen. Nicht verwendete Funktionen sollen weder Zeit noch Speicher kosten. Wird eine Abstraktion eingesetzt, soll ihre Implementierung mit spezialisiertem handgeschriebenem Code konkurrieren können. Das ist keine automatische Leistungsgarantie: Ein schlechtes Design kann weiterhin langsam sein. Die Sprache soll vielmehr Bibliotheken ermöglichen, effiziente Abstraktionen anzubieten.
Templates veranschaulichen dieses Ziel. Sie erlauben, einen Algorithmus für eine Familie von Typen zu schreiben, wobei der Compiler die benötigten Varianten erzeugt. Die Standard Template Library verbindet Container, Iteratoren und Algorithmen, ohne eine gemeinsame Klassenhierarchie vorzuschreiben.
C++ entwickelte außerdem ein deterministisches Modell der Ressourcenverwaltung. Ein Objekt kann in seinem Konstruktor eine Ressource erwerben und sie im Destruktor freigeben. Diese als RAII bekannte Technik betrifft nicht nur Speicher: Dateien, Sperren und Verbindungen können an die Lebensdauer eines Objekts gebunden werden. Moderne Smart Pointer machen dieses Modell sicherer, ohne Low-Level-Kontrolle grundsätzlich auszuschließen.
Von der Bibliothek zur Multiparadigmensprache
Eine Sprache wird im großen Maßstab erst wirklich nutzbar, wenn ihre Abstraktionen in Bibliotheken geteilt werden können. In den Anfängen von C++ dienten Klassen vor allem dazu, Objekte darzustellen und ihren Zustand zu schützen. Templates erweiterten dieses Ziel: Sie beschreiben Familien von Algorithmen und Datenstrukturen, ohne den verarbeiteten Typ im Voraus festzulegen.
Die Arbeit von Alexander Stepanov und Meng Lee an der Standard Template Library war entscheidend. Die STL ist nicht als Objekthierarchie aufgebaut. Sie trennt Container, Algorithmen und Iteratoren, die als Schnittstelle zwischen beiden dienen. Derselbe Sortieralgorithmus kann dadurch mit unterschiedlichen Datenrepräsentationen arbeiten, ohne von einer gemeinsamen Basisklasse abzuhängen.
Die Aufnahme in die Standardbibliothek in den 1990er-Jahren bestätigte, dass C++ längst mehr als „C mit Klassen“ war. Generische Programmierung wurde zu einer tragenden Säule. Später sollten Concepts die Anforderungen an Template-Parameter explizit ausdrücken und damit Schnittstellen und Compilerfehler verständlicher machen.
Diese Entwicklung zeigt Stroustrups Arbeitsweise. Er will kein einziges Paradigma erzwingen, sondern Nutzern die passende Abstraktion wählen lassen und dem Compiler ermöglichen, deren Laufzeitkosten so weit wie möglich zu eliminieren.
Eine lebende Sprache standardisieren
Mit dem Auftreten mehrerer Compiler wurde eine gemeinsame Definition unverzichtbar. Der erste ISO-Standard für C++ erschien 1998. Durch die Standardisierung wurde die Sprache zu einem kollektiven Werk: Stroustrup behielt großen Einfluss, doch Weiterentwicklungen werden von einem internationalen Komitee diskutiert und beschlossen.
C++11 brachte eine umfassende Modernisierung mit Move-Semantik, Lambda-Ausdrücken, Werkzeugen für Nebenläufigkeit und zahlreichen Bibliotheksverbesserungen. Spätere Ausgaben folgten einem regelmäßigen Rhythmus und ergänzten unter anderem Concepts, Module, Ranges und Coroutinen.
Diese Erweiterungen beantworten reale Bedürfnisse, haben aber pädagogische Kosten. Mehrere historische Stile existieren nebeneinander, und Code, der nach älteren Praktiken korrekt ist, entspricht möglicherweise nicht mehr der sichersten modernen C++-Schreibweise. Kompatibilität schützt enorme Softwareinvestitionen, begrenzt aber die Möglichkeit eines vollständigen Neuanfangs.
Was C++ ermöglicht — und verlangt
C++ wird eingesetzt, wenn Leistung, Latenz oder Hardwarezugriff wichtig sind: Spiele-Engines, Browser, Datenbanken, Kreativwerkzeuge, eingebettete Systeme und Finanzinfrastrukturen. Die Sprache ermöglicht reichhaltige Abstraktionen, ohne präzise Kontrolle über die Darstellung von Daten zu verbieten.
Diese Freiheit überträgt große Verantwortung auf Entwickler. Ungültige Speicherzugriffe, undefiniertes Verhalten und Lebensdauerfehler bleiben möglich. Moderne Empfehlungen bevorzugen Container, Objekte mit klarer Ressourcenverantwortung, statische Prüfungen und erprobte Bibliotheken gegenüber systematischem Einsatz roher Zeiger.
C++ mit Java oder Python zu vergleichen bedeutet daher weniger, einen Sieger zu bestimmen, als unterschiedliche Verträge zu betrachten. Java überlässt einer virtuellen Maschine mehr Entscheidungen; Python priorisiert einen sehr direkten Entwicklungszyklus; C++ macht Kosten und Repräsentationsentscheidungen stärker sichtbar.
Warum Bjarne Stroustrup bis heute wichtig ist
Stroustrup zeigte, dass Abstraktion nicht zwangsläufig der Feind von Effizienz ist. Diese Idee beeinflusst C++ ebenso wie neuere Sprachen, die Garantien und Kosten ebenfalls sichtbar machen wollen.
Sein Erbe enthält auch eine unbequemere Lektion: Eine über Jahrzehnte eingesetzte Sprache wird zu sozialer ebenso wie technischer Infrastruktur. Ihre Weiterentwicklung muss Innovation, Sicherheit, Werkzeuge, Ausbildung und Milliarden bestehender Codezeilen miteinander vereinbaren.
Chronologie
1950: Bjarne Stroustrup wird in Aarhus, Dänemark, geboren.
1975: Abschluss an der Universität Aarhus.
1979: Promotion in Cambridge und Eintritt in die Bell Labs.
1979: Beginn der Arbeit an C with Classes.
1983: Einführung des Namens C++.
1985: Erste Ausgabe von The C++ Programming Language.
1989: Veröffentlichung von C++ 2.0.
1990: The Annotated C++ Reference Manual erscheint.
1998: Erster internationaler C++-Standard.
2011: Veröffentlichung von C++11 als wichtiger Schritt des modernen C++.
2014–2023: Neue Standards in ungefähr dreijährigem Rhythmus.
Heute: Stroustrup arbeitet weiter an Design, Lehre und Sicherheit von C++.
Häufig gestellte Fragen
Hat Bjarne Stroustrup C++ allein entwickelt?
Er initiierte und leitete den ursprünglichen Entwurf. Später wurde die Sprache zum Produkt von Compilern, Bibliotheken, Anwendern und einem internationalen ISO-Komitee.
Warum heißt die Sprache C++?
In C erhöht der Operator ++ einen Wert. Der Name deutet daher ein „erweitertes“ C an, ohne zu behaupten, es handle sich lediglich um die nächste offizielle Version von C.
Ist C++ nur eine objektorientierte Sprache?
Nein. Sie unterstützt prozedurale, objektorientierte, generische und funktionale Stile. Stroustrup beschreibt sie als Multiparadigmensprache.
Ist C++ mit C kompatibel?
Viel C-Code kann angepasst oder als C++ kompiliert werden, doch die Sprachen sind nicht vollständig kompatibel. Beide besitzen eigene Standards, und manche Konstruktionen sind nur in einer der beiden gültig.
Warum ist C++ schwer zu lernen?
Die Sprache verbindet mehrere Paradigmen, bewahrt viele historische Entscheidungen und gibt Entwicklern weitreichende Kontrolle. Beim Lernen ist es sinnvoll, mit modernen Praktiken statt mit systematischer manueller Speicherverwaltung zu beginnen.
Wo bleibt C++ relevant?
In Software, bei der Leistung, Latenz, Speicherbedarf oder Hardwareintegration entscheidend sind: Spiele, Browser, Datenbanken, wissenschaftliches Rechnen, eingebettete Systeme und Infrastruktur.
Von C with Classes bis zu modernen Standards: Wie C++ Abstraktion, generische Programmierung, Kompatibilität und Leistungskontrolle miteinander verbindet.