Interview mit C++-Schöpfer Bjarne Stroustrup

Seite 2: Weiterentwicklung und Lehre

Inhaltsverzeichnis

heise Developer: Haben aktuelle Bewegungen und Konzepte wie Continuous Delivery einen Einfluss auf die C++-Enwicklung?

Stroustrup: Ja. Einige in der Standardisierung (insbesondere Microsofts Herb Sutter, der dem Komitee vorsitzt) haben beschlossen, dass das Modell "ein neuer Standard pro Dekade", dass die meisten der ISO-standardisierten Sprachen nutzen, nicht mehr flexibel und responsiv genug ist. Deshalb haben wir uns für ein Modell entschieden, in dem einem Major Release ein Minor Release folgt und uns mit drei Jahren für das erste Minor Release (C++14) ein ambitioniertes Ziel gesetzt. In drei Jahren soll das nächste große Release folgen (C++17) und wir könnten es sogar schaffen.

Zusätzlich zu dem eigentlichen ISO-Standard arbeitet das Komitee an technischen Spezifikationen (Technical Specification, TSs). Wir sehen sie als Zwischenschritt auf dem Weg zum Standard. Sie werden implementiert und den Menschen zur Verfügung gestellt, damit sie sie in realem Code ausprobieren können, bevor es zur Standardisierung kommt. Das haben wir beispielsweise für unordered_map und shared_ptr im Vorfeld des C++11-Standards gemacht. Es gibt derzeit etwa 11 TSs in unterschiedlichen Stadien der Fertigstellung. Zu ihnen zählen beispielsweise:

  • Nebenläufigkeit
  • Dateisystem (fertig)
  • Konzepte
  • Parallelität
  • Netzwerk
  • Transaktionaler Speicher
  • Bereiche (Ranges)

heise Developer: Gibt es aktuell aufkommende Sprachen, die Sie auf die eine oder andere Art interessant finden?

Stroustrup: Es gibt viele interessante Ideen in der Welt des Sprachentwurfs, aber meine Hauptinspirationsquelle ist der Systembau. Ich stamme aus dem Systembereich der Informatik und fühle mich sicherer, wenn ich über verteilte Systeme oder Cache-Effekte sprechen kann, als wenn es um Typentheorie geht. Für mich sind Applikationen interessanter und wichtiger als die Sprachfeatures. Für sich allein ist jede Eigenheit einer Programmiersprache langweilig.

heise Developer: C++ gilt als eine der schwerer zu erlernenden Sprachen. Was könnte man Ihrer Meinung nach verbessern, um Anfängern den Einstieg zu erleichtern?

Stroustrup: Wenn man es mit anderen Sprachen vergleicht, ist C++ tatsächlich schwer gut zu erlernen. Es gibt viel mehr zu lernen, weil C++ so viel mehr ausdrücken kann und sich zu einem viel breiteren Spektrum von Anwendungen einsetzen lässt als die meisten anderen Sprachen. Trotzdem kann sie zu lernen sehr lohnend sein, weil sie letztlich eine unübertroffene Vielzahl von Kombinationsmöglichkeiten von Flexibilität und Leistungsfähigkeit ermöglicht. C++ legt grundlegende Mechanismen frei, die andere Sprachen eher verstecken – wodurch ihre Nutzer an "Magie" glauben.

Es geht hier aber nicht um Sprachdesign, sondern um das Lernen. C++11 und C++14 sind wesentlich einfacher beizubringen und zu lernen als C++98, und auch das ist viel einfacher zu erlernen, als der Ruf impliziert. Das Problem ist, dass viele Neulinge mit dem Kopf zuerst in die dunkelsten Abgründe der Sprache abtauchen und einfache Lösungen ignorieren. Gleichzeitig bestehen viele Lehrer darauf, ihre unschuldigen Studenten jedem obskuren Detail von C auszusetzen, bevor sie ihnen die C++-Möglichkeiten demonstrieren, die dafür sorgen, dass sie sich mit diesen Komplexitäten nicht auseinandersetzen müssen, bis sie sie wirklich brauchen (wenn das jemals der Fall sein sollte). C++-Elemente wie vector und string vereinfachen vielen Code, der mit Arrays, Zeigern, Makros und expliziter Speicherverwaltung umgesetzt wird.

heise Developer: Da Sie ja auch lehren, wie gehen Sie konkret mit Sprachneulingen um?

Stroustrup: Wenn ich Anfängern C++ beibringe, nutze ich von Anfang an moderne Spracheigenschaften und setze Studenten erst nach maximal acht Wochen Arrays und Pointern aus. Die andere Quelle von Schwierigkeiten beim Lernen von C++ ist die Kompatibilität mit C und mit den älteren C++-Versionen. Man kann auch nicht einfach alles vergessen, was vor 2000 eingeführt wurde. Es gibt Milliarden Zeilen C++-Code da draußen und viele entsprechen nicht dem heutigen Geschmack. Stabilität über Dekaden hinweg (Kompatibilität) ist ein wichtiges Feature, und ISO C++ bietet es an. Trotzdem ist es nicht sinnvoll, sich mit den ältesten Features aufzuhalten, wenn man Anfänger unterrichtet – aber viele machen es so. Wenig überraschend wird es dann sehr schnell sehr schwierig.

Wir könnten das viel besser. C++11 hat Elemente wie Range-for-Schleifen, uniforme Initialisierung, Lambda-Ausdrücke, generalisierte konstante Ausdrücke, und natürlich kann die größere Standardbibliothek zu viel einfacherem Code führen. Damit entwickelter Code lässt sich einfacher lesen, schreiben und instand halten.

heise Developer: Vielen Dank, dass Sie sich die Zeit für das Gespräch genommen haben.

Das Interview führte Julia Schmidt.

(jul)