Interview mit C++-Schöpfer Bjarne Stroustrup

Sprachen  –  8 Kommentare

Seit gut 35 Jahren arbeitet Bjarne Stroustrup an C++. Warum sich die gerade abgesegnete Version lohnt, wie man die Sprache besser vermitteln kann und was er sich für ihre Zukunft wünscht, verrät er im Gespräch.

heise Developer: Herr Stroustrup, wie sind Sie zum Programmieren gekommen?

Bjarne Stroustrup: Als ich auf der Suche nach etwas zum Studieren an der Universität war, strebte ich eine Art der angewandten Mathematik an und entschied mich deshalb für die Informatik. Zum Glück für mich war es dann doch nichts dergleichen, und ich lernte die Programmierung, Rechnerarchitekturen und Betriebssysteme schnell lieben. Es war – und das ist es auch immer noch – einfach ein wunderbar dynamisches und ständig wachsendes Feld. Die Tatsache, dass man in diesem Bereich als einzelnes Individuum einen positiven Beitrag zur Welt leisten kann, ist mir sehr wichtig.

heise Developer: Gibt es etwas, auf dass sie besonders stolz sind, wenn sie auf die über 30 Jahre zurückblicken, die es C++ nun schon gibt?

Über Bjarne Stroustrup

Bjarne Stroustrup begann 1979 C++ unter dem Namen "C mit Klassen" zu entwickeln. Ziel war es damals, eine Programmierspache zu schaffen, in der sich gleichzeitig effizient und elegant Code schreiben lässt. Auslöser für die Entwicklung war Stroustrups Arbeit im Bereich der verteilten Systeme.

Die erste Version wurde ab August 1983 intern bei AT&T eingesetzt, im selben Jahr erhielt die Sprache auch ihren neuen Namen, C++. Die erste kommerzielle Implementierung veröffentlichte man im Herbst 1985, 1998 wurde die Sprache erstmals standardisiert.

Stroustrup ist derzeit Managing Director der Technologieabteilung bei Morgan Stanley, Gastprofessor an der Columbia Univerity und bekleidet als Professor den Lehrstuhl für Informatik an der Texas A&M University. Sein Forschungsinteresse liegt in den Bereichen Programmierwerkzeuge, -techniken und -sprachen. Er ist aktiv an der ANSI/ISO-Standardisierung von C++ beteiligt.

Stroustrup: In Hinblick auf C++ war das Einführen von Konstruktoren und Destruktoren wohl meine beste Leistung. Sie waren schon in der ersten Woche Teil des Designs. Die meisten modernen C++-Techniken sind von ihnen abhängig.

Generell freue ich mich sehr darüber, dass C++ eine Rolle in vielen der großen natur- und ingenieurwissenschaftlichen Durchbrüche unserer Zeit spielte. Da wären beispielsweise die Sequenzierung des menschlichen Genoms, die Mars-Rover und der Fund des Higgs-Boson. Zu diesen historischen Unterfangen beigetragen zu haben – auch wenn es nur ein kleines bisschen war – ist das, was mich antreibt. Es ist außerdem aufregend – und auch etwas erschreckend – zu wissen, dass C++ in fast jeder Industrie massiv zum Einsatz kommt: in der Kommunikationstechnik, dem Transportwesen, der Landwirtschaft und natürlich dem Computerwesen. Es ist also ein entscheidender Bestandteil der Infrastruktur der Welt und hat Einfluss auf unser tägliches Leben. Wenn ich etwas schreibe, nutze ich Software, die in C++ geschrieben wurde, auf einem Computer, der mit C++ entworfen und implementiert wurde, und auch den fertigen Text werde ich über ein Kommunikationssystem versenden, das seine Erfinder mit C++ umsetzten. Klar ist nicht jeder Code, den wir verwenden, C++-Code, aber es ist doch schon vergleichsweise häufig so. Schließlich hat C++ der Entwicklung von Programmiersprachen und -werkzeugen einen Impuls gegeben, zum Teil durch den Einsatz der Sprache und zum Teil konnte es Leute dazu motivieren, bessere Dinge zu machen.

heise developer: Und die negativen Seiten?

Stroustrup: Natürlich wurde C++ auch für Anwendungen genutzt, die ich nicht mag, aber lassen Sie uns gar nicht erst davon anfangen. Jedes Werkzeug lässt sich für das Gute und das Böse einsetzen.

Ich habe mehr fürchterlichen Code gesehen, als ich mir jemals hätte träumen lassen. Schlechter Code ist natürlich kein reines C++-Problem, und vielleicht war der schlechteste, den ich gesehen habe, noch nicht einmal in C++ verfasst. Allerdings fühle ich mich für C++-Code ein wenig verantwortlich. Ich vermute, dass das Problem weit über C++ herausgeht und eher mit einem Versagen in der Ausbildung zu tun hat, wo sich Grundlagen der Informatik teilweise nicht als wichtiges Thema durchsetzen konnten. Es scheint so, als würde das US-amerikanische Bildungssystem in diesem Bereich einige Wissenschaftler, Horden von angelernten "Codern" und bei weitem zu wenig Leute mit einer ausgewogenen Mischung aus zur Softwareentwicklung notwendigen Fähigkeiten (zum Beispiel ein stabiles Grundlagenwissen in den Bereichen Mathematik, Datenstrukturen, Algorithmen, Rechnerarchitektur, Design- und Programmierungstechniken, Systementwicklung, Tests, Qualitätssicherung und ein gutes Verständnis des Anwendungsbereichs) und einer professionellen Einstellung hervorbringen. Der Versuch, das alles durch das Design einer Sprache abfangen zu wollen, ist wahrscheinlich unmöglich und – was noch schlimmer ist – macht das Einführen besserer Techniken und das Aktualisieren unserer Toolchains (wozu auch Programmiersprachen zählen) schwerer.

heise developer: In den letzten Jahren sind Go und Rust als C++-Alternativen auf der Bildfläche erschienen. Kann C++ von der jungen Konkurrenz lernen?

Stroustrup: C++ kann sowohl von jungen als auch von älteren Sprachen lernen. Wir versuchen immer zu lernen, und manchmal machen wir so Fortschritte. Umgekehrt lernen ja auch viele neuere Sprachen von C++. Es ist schwer, C++ in vielen seiner Einsatzgebiete zu schlagen, und es entwickelt sich ständig weiter. Wir haben C++11, und jetzt wurde auch C++14 rechtzeitig fertig. Die Sprache ist nicht mehr die Karikatur aus den 1980er Jahren, die viele Leute augenscheinlich lieben zu hassen.

heise Developer: In 15 Jahren wird C++ etwa 50 Jahre alt sein. Wird es dann Ihrer Meinung nach immer noch diese Bedeutung haben?

Stroustrup: Es ist nicht unwahrscheinlich, dass C++ in 15 Jahren immer noch die Bereiche der Programmierung dominieren wird, in denen Ressourcenverbrauch und Verlässlichkeit die wichtigsten Punkte sind. Wenn nicht, wird eine Sprache, die von C++ gelernt hat, diese Rolle eingenommen haben.

heise Developer: Gibt es irgendwelche Entwicklungen, die Sie sich bis dahin wünschen?

Stroustrup: Ich hoffe, dass C++ bis dahin eine Auswahl einfacher und spezialisierter Modelle für die Nebenläufigkeit hat. Es sollte eine aufgeräumtere Syntax haben, ein höheres Maß an Typsicherheit aufweisen und schneller kompilieren. Ich denke, bis dahin wird es noch immer eine direkte und effiziente Art haben, die Hardware abzubilden, und ganz generell wird es Abstraktionsmöglichkeiten, die keinen Overhead generieren, geben und die Sprache wird noch genauer spezifiziert sein. Ich erwarte, dass die Infrastruktur aus unterstützenden Werkzeugen, Bibliotheken, Bildungseinrichtungen und der Support in der Community sich bis dahin immens verbessert haben.

heise Developer: Da Sie C++14 bereits erwähnten, was sind für Sie die Hauptgründe, weshalb Entwickler baldmöglichst C++14 einsetzen sollten? Vor allem unter dem Gesichtspunkt, dass es noch einige Toolhersteller gibt, deren Produkte noch immer nicht komplett kompatibel zu C++11 sind?

Stroustrup: Genau genommen behaupten die Macher von GCC und Clang bereits heute, zu 100 Prozent mit C++14 kompatibel zu sein und auch Microsofts C++-Implementierung ist nicht mehr weit davon entfernt. Alle, die an der Umsetzung des Standards arbeiten, behandeln C++11 und C++14 als eins. Das ist auch die richtige Herangehensweise, da C++14 eine inkrementelle Verbesserung von C++11 ist, die bewusst entworfen wurde, um diese Version zu komplettieren, und nicht, um bahnbrechende Neuerungen einzuführen.

Die Leute sind viel schneller damit, sich C++11 und C++14 anzueignen, als sie es bei C++98 waren. Die Compiler sind jetzt viel schneller besser und es scheint in der Community einen besseren Austausch in Bezug auf neue Features zu geben. Viele davon erleichtern das Programmieren ohne das schwerwiegende Änderungen im Code nötig sind.

heise Developer: Ist es auch für die kommenden C++-Versionen ein gutes Zeichen, dass C++14 so plangemäß fertig wurde? Oder ist es wirklich lediglich ein Hinweis darauf, dass es nicht viel Neues gibt?

Stroustrup: Wenn man ein großes Produkt ausliefert, so wie den C++11-Standard, gibt es immer Features, die sich aus Zeitgründen nicht umsetzen lassen. Einige Konsequenzen eines Entwurfs lassen sich auch erst absehen, wenn man das Produkt zum ersten Mal einsetzt. C++14 war als kleines Release angesetzt, um solchen Konsequenzen Rechnung tragen zu können. Es ist aber weitaus mehr als ein Bugfix-Release. Sein Umfang ist bewusst klein gehalten, um es rechtzeitig bereitstellen zu können. Zum Beispiel:

  • C++11 gab uns Lambdas, C++14 erlaubt generische Lambdas.
  • C++11 brachte nutzerdefinierte Literale. Die Standardbibliothek von C++14 erlaubt beispielsweise, dass Great!s ein std::string-Literal sein kann (um den Unterschied zu verdeutlichen, old wäre ein String, wie er in C festgeschrieben ist – ein nullterminierter Array von Buchstaben) und 2s+45ms eine zeitliche duration.
  • C++11 gab uns unique_ptr, C++14 ergänztemake_unique(), um ein Objekt zu erstellenund ihm einen unique_ptr zu übergeben.
  • C++11 wartete mit constexpr-Funktionen auf, um Evaluationen zur Kompilierzeit einfach und allgemeiner zu gestalten, C++14 ermöglicht das Nutzen von if-Statements und Schleifen in constexpr-Funktionen, um sie noch einfacher schreiben zu können.

Alles in allem gibt es ein oder zwei Dutzend Ergänzungen (je nachdem, wie man zählt). Darüber hinaus wurde der Standard an einigen Stellen deutlich klarer formuliert, um die Arbeit der Implementierer zu erleichtern, die Portabilität wurde also verbessert.