C++ gehört seit Jahrzehnten zu den wichtigsten Programmiersprachen der Welt. Ihr Erfinder, Bjarne Stroustrup, bleibt auch heute einer der einflussreichsten Vordenker, wenn es um die Entwicklung und den Einsatz der Sprache geht. Bei einer jüngsten Veranstaltung, dem Qt World Summit in München, gab Stroustrup spannende Einblicke in die Rolle von C++ im 21. Jahrhundert, die Risiken durch Künstliche Intelligenz (KI) und die Gründe, warum C++ nur schwer durch moderne Alternativen ersetzt werden kann. Stroustrup betonte zunächst, dass modernes C++ nicht nur aus den neusten Features besteht, sondern vielmehr eine Kombination aller Sprachmerkmale von den Anfängen bis heute darstellt.
Für ihn ist die moderne Nutzung von C++ nicht das blinde Anwenden der jüngsten Entwicklungen wie Reflexion oder Verträge, sondern die bewusste und kohärente Anwendung der Sprache als Ganzes. Die Sprache habe sich zu einem Ausdrucksmittel entwickelt, das effizienter, ausdrucksstärker und sicherer ist, wenn man sie richtig einsetzt. Ein zentrales Element moderner C++-Programmierung ist laut Stroustrup das Zusammenspiel verschiedener Sprachfeatures. Ein Beispiel hierfür ist die Art und Weise, wie Schleifen geschrieben werden. Statt klassischer Schleifen mit expliziten Zählvariablen sind moderne Sprachkonstrukte wie der Bereichs-basierte for-Loop („for x in y“) viel einfacher und sicherer.
Dies nehme nicht nur den Programmierern Fehlerquellen ab, sondern ermögliche auch dem Compiler bessere Optimierungsmöglichkeiten. Zudem gewinnt das Typsystem an Bedeutung, da durch Typinferenz automatisch der richtige Datentyp ermittelt wird, ohne dass der Programmierer dies manuell vornehmen muss. Darüber hinaus ist das Ressourcenmanagement ein Herzstück moderner C++-Entwicklung. Stroustrup hob das Prinzip RAII – Resource Acquisition Is Initialization – hervor. Dieses Konstrukt sorgt dafür, dass Ressourcen wie Speicher oder Dateihandles automatisch verwaltet und freigegeben werden.
Dadurch werden viele der klassischen Probleme wie Speicherlecks weitestgehend vermieden. Das bedeutet konkret, dass jede Ressource von einem sogenannten Handle verwaltet wird, das sich im richtigen Gültigkeitsbereich befindet und so für sauberes Aufräumen sorgt. Ein weiterer Punkt, den Stroustrup heraussticht, ist der Verzicht auf den Gebrauch von rohen Zeigern (Raw Pointers) als Ressourcengriffs. Diese seien besonders fehleranfällig und würden oft die Vorteile moderner Sprachkonzepte unterlaufen. Stattdessen sollten Container wie Vektoren verwendet werden, die ihren eigenen Speicherverbrauch und die Anzahl der Elemente kennen.
Dies fördert nicht nur die Sicherheit, sondern auch die Wartbarkeit von Code. Ebenso empfiehlt er, Casts im Code soweit möglich zu vermeiden, da sie potenzielle Quell von Typfehlern sind. Moderne generische Programmierung und Vorlagen (Templates) reduzieren oftmals den Bedarf, Casts überhaupt einzusetzen. Statt auf Pointer zurückzugreifen, sollten moderne Entwickler beispielsweise die Vorteile von Move-Semantik nutzen, die es erlaubt, Ressourcen effizient vom Funktionsaufruf zurückzugeben, ohne dass dabei teure Speicherallokationen entstehen. Das Ergebnis sind Programme, die nicht nur performanter, sondern auch leichter zu schreiben und zu verstehen sind.
Ein weiterer Fortschritt in der C++-Entwicklung sind die Module, die der traditionellen Verwendung von #include gegenüberstehen. Anders als das klassische Einfügen von Header-Dateien, das oft zu wiederholter Kompilierung und subtilen Fehlern führt, sind Module nicht transitiv und erlauben eine einmalige Kompilierung. Das verbessert sowohl die Kompilierzeiten als auch die Zuverlässigkeit von großen Codebasen erheblich. Stroustrup verwies ebenfalls auf Templates und Konzepte – seit C++20 ein fester Bestandteil – als Elemente, die das Schreiben von generischem Code deutlich einfacher machen. Konzepte ermöglichen dabei eine bessere Beschränkung der Typen, die an Templates übergeben werden, was wiederum zu klarerem und sichererem Code führt.
Laut Stroustrup sind diese Sprachfeatures heute ausreichend und er setze keine komplizierteren Konstrukte ein. Seine Erfahrung zeigt, dass der richtige Umgang mit diesen Mitteln seit Jahren zu praktisch keinem Speicherverlust in seiner Produktion führt. Trotz seiner Begeisterung für modernes C++ sieht Stroustrup weiterhin Herausforderungen bei der Durchsetzung moderner Programmierrichtlinien in großen Projekten. Er entwickelt daher Profile, die es ermöglichen sollen, Gewährleistungen hinsichtlich Sicherheit und Programmierqualität zu bieten und diese auch durchzusetzen – ein Schritt, der allerdings noch nicht in die C++-Standards eingeflossen ist und für den es keine unmittelbaren Perspektiven gibt. Bis dahin können Tools wie Clang-Tidy und die C++ Core Guidelines von Industriepartnern helfen, guten Programmierstil zu fördern.
Stroustrup lehnt grundsätzlich die Idee ab, gefährliche oder komplexe Sprachkonstrukte einfach aus C++ zu entfernen, obwohl dies immer wieder gefordert wurde. Er argumentiert, dass genau diese „gefährlichen“ Features notwendig sind, um leistungsfähige Abstraktionen zu bauen. Statt sie zu streichen, sollten sie nur aus dem Anwendungscode verbannt und innerhalb von gut getesteten Komponenten behandelt werden. Ein Beispiel dafür sind Operationen wie operator new und operator delete, die nicht direkt im Anwendungscode aufzufinden sein sollten. Neben technischen Aspekten hob Stroustrup auch gesellschaftliche und technologische Entwicklungen hervor, insbesondere die Rolle von Künstlicher Intelligenz.
Er äußerte sich besorgt, welche Folgen der zunehmende Einsatz von KI-Tools in der Softwareentwicklung haben kann. Zwar erkennt er deren potenziellen Nutzen an, warnt aber davor, dass die Tools häufig auf veraltete oder suboptimale Praktiken verweisen und Entwickler so nicht zwingend bessere Ergebnisse erzielen. Gefährlich sei außerdem, dass Programmierer durch die Abhängigkeit von KI-Unterstützung unter Umständen die Fähigkeit verlieren könnten, Probleme selbst zu erkennen und zu lösen. Ein weiterer Trend, den Stroustrup kritisch betrachtet, ist das Aufkommen neuer Programmiersprachen wie das Carbon-Projekt von Google, das als möglicher Nachfolger oder Alternative zu C++ diskutiert wird. Er erkennt zwar an, dass es im engen Anwendungsbereich möglich ist, eine Sprache zu entwickeln, die besser als C++ ist, dennoch bestehe ein großer Vorteil darin, dass C++ in vielen verschiedenen Domänen anwendbar ist.
Zudem bestehe das Risiko, dass eine Vielzahl neuer Sprachen, die sich alle auf Interoperabilität mit anderen Sprachen wie Python oder C++ stützen müssen, ein komplexes Ökosystem erschaffen, das sich kaum leichter handhaben lässt als die heute bestehenden Varianten. Die Geschwindigkeit, mit der sich C++ weiterentwickelt, wird oft als zu langsam oder zu schnell kritisiert. Stroustrup zeigt sich überzeugt, dass sich die Balance im aktuellen Tempo befindet, auch wenn er sich wünschen würde, dass der Standardisierungsausschuss schneller agiert. Die Größe und Diversität des Ausschusses führe allerdings zu langsamen Entscheidungsprozessen. Interessanterweise gebe es mehr Entwickler, die sich über zu schnelle Entwicklungen beschweren als solche, die mehr Tempo fordern.
Was die verschiedenen Implementierungen von C++-Compilern angeht, erklärt Stroustrup, dass die Unterschiede zwar vorhanden sind, dies aber kein Nachteil sei. Er lehnt Monokulturen ab, weil sie anfällig für Fehler und Schwachstellen seien. Die Existenz mehrerer Compiler schafft stattdessen Wettbewerb, Innovation und reduziert das Risiko, dass alle Nutzer einer Sprache von einem einzigen Bug betroffen sind. Daher betrachtet er die Vielfalt der Compiler-Implementierungen als Vorteil und Normalfall. Zusammengefasst zeigt sich, dass Bjarne Stroustrup C++ auch im Zeitalter von KI und neuen Sprachen als unverzichtbar ansieht.
Seine Vision von modernem C++ ist eine Sprache, die sowohl die Tradition als auch die neuesten Entwicklungen miteinander verbindet, Werkzeuge bietet, die Sicherheit erhöhen und effiziente Programmierung ermöglichen. Gleichzeitig mahnt er zur Vorsicht beim Umgang mit KI und davor, die Sprache leichtfertig ersetzen und vereinfachen zu wollen. C++ bleibe aufgrund seiner Vielseitigkeit und Leistungsfähigkeit eine zentrale Säule moderner Softwareentwicklung und wird dies wohl auch in Zukunft bleiben.