Diese Arbeit basiert auf Ideen, die ich seit dem Jahr 1999 beiläufig immer mal wieder notierte, auf den Erfahrungen, die ich durch den Genesys C Compiler von 2003, den ich als großes Projekt bei Herrn Professor Martin Schiemann eingereicht habe, den selbstentwickelten Skriptsprachen SKAAAS und SIGA und den (Negativ-)Erfahrungen, die ich bei der Programmierung in den Sprachen AmOS, ARexx, Assembler, AWK, Basic, C, C++, C#, Delphi, Java, Java-/EcmaScript, Pascal, Perl und PHP gesammelt habe.
Lediglich ein (mir bekanntes) Buch beschreibt glaubwürdig, warum eine Programmiersprache ihren Entwurf erhielt. Es handelt sich um „Entwicklung und Design von C++“[1] von Barne Stroustrup. Im Gegensatz zu „Die Programmiersprache C++“ [7] beschreibt Stroupstrup hier nicht, wie man C++ programmiert, sondern warum man mit C++ so programmiert. Es werden Designentscheidungen beschrieben, Umentscheidungen und die Regeln nach denen C++ entwickelt wurde. Durch die Lektüre dieses Buches fallen bisher hingenommene Interpretationen anderer Autoren zu diesem Thema auf, welche dieses Buch offenbar nicht kannten. C++ ist eine gewachsene Sprache und nicht ein perfekt durchdesigntes Werkzeug, das alle Wünsche des Erfinders Bjarne Stroustrup berücksichtigt.
Der Vergleich zwischen meinen privaten Arbeiten und Bjarne Stroustrups Buch „Entwicklung und Design von C++“ zeigt erstaunlich viele Übereinstimmungen bezüglich der Herangehensweise und der Kritik an C/C++ heraus. Allerdings sind seit der Entwicklung von „C mit Klassen“(1979) über „Cfront“(1982) zu „C++“(1984) viele Jahre vergangen. Meine ersten Programmiererfahrungen machte ich 1986, als für C++ bereits viele Designentscheidungen getroffen waren und in den nachfolgenden nur noch Versionen erweitert wurde.
Die damalige Situation war, dass C viele Benutzer hatte und als die für Systemprogrammierung beste Programmiersprache galt. Grafische Oberflächen erschienen erst gegen 1984 auf Apples Lisa, bzw. dem bekannteren Nachfolger Apple Macintosh. Speicherverschwendung wurde erst mit Erscheinen der grafischen Oberflächen gesellschaftsfähig und Gigahertzrechner waren seinerzeit vollkommen unbekannt. Mit der Verbreitung von C++ und Sprachen, die sich an die Syntax von C++ anlehnen (C# und Java), verbreitete sich auch die objektorientierte Programmierung, so dass man aus heutiger Sicht über einen Erfahrungsschatz verfügt, auf den Bjarne Stroustrup bei der Definition von C++ nicht zurückgreifen konnte. Weiterhin haben sich die Grundvoraussetzungen an Programmiersprachen damit vollkommen verändert.
Die Systemprogrammierung hat im Alltag an Bedeutung verloren, das Betriebsystem dient als Wrapper für die verwendete Hardware, so dass nicht mehr direkt für die Rechner-Architektur entwickelt werden muss, sondern für ein Betriebsystem oder bei Java für eine virtuelle Maschine. Der Programmierer verwendet optimiert vorliegende Komponenten und kann sich somit auf die Entwicklung der eigentlichen Anwendung konzentrieren: Die Anwendungsprogrammierung tritt in den Vordergrund und damit der einfache Zugriff auf vorhandene Komponenten.
C++ entstand unter der Prämisse, eine Sprache zu entwickeln, die effektiv zu programmieren ist, schnell erlernbar (C war bereits 12 Jahre alt und gut verbreitet) und ebenso schnelle Programme wie C liefern soll. Weiterhin sollte maximale Kompatibilität zu C bewahrt werden. Dies betrifft die Sprachsyntax, sowie die Objektfiles, so dass C++-Quellcodes mit vorhandenen C-Quellcodes oder sonstigen Sprachen mit gleichen Aufbau der Objektfiles zusammengelinkt werden können.
Pascal, C und andere Sprachen erstellen als Compilerprodukt nicht ein ausführbares Programm, sondern ein standardisiertes Objektfile, das den Namen der enthaltenen Funktionen und die Darstellung der Funktion als Maschinencode enthält. Der Binder führt nun alle Funktionsaufrufe zwischen den Objektfiles zusammen, so dass ein fertiges Programm Programmteile enthalten kann, die in unterschiedlichen Programmiersprachen entwickelt wurden. Hierbei war das Problem zu lösen, dass Funktionsnamen in unterschiedlichen Klassen mehrfach auftreten konnten, da C++ die erste Sprache war, die in Objektfiles kompilieren sollte.
Die Anwendungsprogrammierung selbst spielte bei der Entwicklung von C++ keine nennenswerte Rolle, da zu dieser Zeit Anwendungsprogrammierung und Systemprogrammierung gar nicht so weit zu trennen waren.