Bevor C++ 1998 erstmals standardisiert wurde, hatte Bjarne Stroustrup die Sprache seit 1979 bei den Bell Labs als Erweiterung von C entwickelt. Sein Ziel war eine effiziente und flexible Sprache, die C ähnlich blieb.
1983 wurde „C with Classes“ in „C++“ umbenannt. Gleichzeitig kamen neue Funktionen hinzu, darunter virtuelle Funktionen, das Überladen von Funktionsnamen und Operatoren, Referenzen, Konstanten, typsichere dynamische Speicherverwaltung mit new/delete sowie eine verbesserte Typprüfung.
Die 1990er-Jahre waren das goldene Zeitalter von C++: Die Sprache war äußerst populär, und insbesondere im Zuge der OOP-Revolution entstanden zahlreiche Projekte damit. Nach 1998 stagnierte C++ jedoch viele Jahre. Zwischen 2000 und 2010 unterstützten kaum große Unternehmen die Weiterentwicklung der Sprache; Microsoft konzentrierte sich stärker auf seine neue .NET-Technologie.
Überraschenderweise war nach 2010 zunehmend von einer „C++-Renaissance“ die Rede. Microsoft spielte dabei zweifellos eine wichtige Rolle; ich erinnere mich an diesesVideoin dem Craig Symonds und Mohsen Agsen darüber sprachen.
2011 kündigte Microsoft in zahlreichen Artikeln das Comeback von C++ an. C++-Experten des Unternehmens wie Herb Sutter hielten viele Vorträge darüber, warum C++ zurück sei, und empfahlen vor allem den Einsatz von modernem C++. Gleichzeitig wurde der C++11-Standard verabschiedet, und man begann, von C++ beinahe wie von einer neuen Sprache zu sprechen.
Doch 2011 blickte C++ bereits auf mehr als 30 Jahre Geschichte zurück. Entwickler davon zu überzeugen, dass das neue C++ viele frustrierende Aspekte vereinfacht hat und es inzwischen moderne Wege gibt, C++-Code zu verbessern, ist nicht einfach.
Nehmen wir die Speicherverwaltung als Beispiel – vielleicht einen der am häufigsten kritisierten Aspekte von C++. Viele Jahre lang wurden Objekte mit dem Schlüsselwort new angelegt, und Entwickler mussten daran denken, an anderer Stelle im Code delete aufzurufen. „Modern C++“ hat dieses Problem aufgegriffen und fördert den Einsatz von Smart Pointern.
Leider reichten selbst die Bemühungen der aktiven C++-Community und bekannter Experten nicht aus. Die Lehre daraus lautet:Wenn eine Sprache oder ein Werkzeug eine bestimmte Möglichkeit bietet, sollte man sich nicht wundern, wenn sie auch genutzt wird.
Genau das ist bei C++ passiert: new und delete stehen weiterhin zur Verfügung, und aus vielen Gründen können sie natürlich nicht einfach entfernt werden. Obwohl modernes C++ seit Jahren den Einsatz von Smart Pointern fördert, wird die Objekterzeugung mit new noch lange anzutreffen sein.
Die Vergangenheit von C++ prägt seine heutige Verwendung stark – selbst in neu gestarteten Projekten. Viele Entwickler halten die Sprache deshalb weiterhin für äußerst komplex.
Wie beeinflusst die Vergangenheit von C++ die Sprache?
Machen wir einen einfachen Test: Suchen Sie im Web nach „C++ object allocation“ und betrachten Sie die Ergebnisse. Fast alle Links auf der ersten Seite behandeln new/delete oder sogar malloc.
Ein weiterer interessanter Test: Gehen Sie in eine beliebige Universitätsbibliothek, nehmen Sie ein C++-Buch zur Hand und lesen Sie das Kapitel über die Objekterzeugung. Meist dreht es sich vor allem um das Schlüsselwort new.
Kurz gesagt: Wer heute neu in C++ einsteigt, findet noch immer mehr Ressourcen über „C with Classes“ als über modernes C++.
Wie lässt sich der Einfluss der C++-Vergangenheit begrenzen?
Eine Patentlösung gibt es nicht. C++-Compiler können helfen, indem sie vor veralteten Praktiken warnen, etwa vor alten Funktionen zur String-Verarbeitung wie strcpy oder strcat. Allein wird das jedoch wenig verändern. Bei modernem C++ geht es vor allem darum, neue Idiome zu lernen und konsequent anzuwenden.
Eine weitere Möglichkeit wäre, sich vorzustellen, C++ habe seinen Namen geändert und heiße nun „Modern C++“. So simpel diese Idee auch klingt, das Ergebnis ist bemerkenswert. Wiederholen Sie die vorherige Websuche, diesmal jedoch nach „Modern C++ object allocation“: Schon der erste Treffer behandelt Smart Pointer.
Ein Rat an neue C++-Entwickler: Stellen Sie sich vor, C++ hätte seinen Namen geändert, und verwenden Sie bei Websuchen stets „Modern C++“ statt nur „C++“. Die Ergebnisse unterscheiden sich deutlich, denn eine Suche lediglich nach C++ führt häufig zu Informationen über ältere Praktiken.
