Why C++ sucks


Oft wurde schon erläutert, warum C++ als Programmiersprache nichts taugt. Da es nach wie vor zu viele Leute benutzen waren die Argumente gegen C++ noch nicht stichhaltig genug. Das Hauptproblem mit C++ ist, dass es Objektorientierung mit einer kompilierten Sprache verbindet. Das sind zwei Dinge die nicht zusammengehören. Wenn man mit OOP arbeitet, will man im Regelfall häufiger den Code verändern. OOP wird überwiegend auf der High-Level-Ebene genutzt, also wenn es bereits Bibliotheken für die Grafik, für die GUI und die Physik gibt und man diese zu einem fertigen Programm zusammenfügen möchte. C++ verlangt jedoch zwingend dass man den Code in Maschinensprache übersetzt, dadurch werden die Edit-Compile-Run Zyklen extrem langatmig. Auf der anderen Seite ist C++ aber auch für Lowlevel Aufgaben wie Kernelprogrammierung ungeeignet, weil es eine Reihe von Features mitbringt, die dort als Ballast wahrgenommen werden.

Besser ist es, wenn man mindestens 2 Sprachen verwendet. Eine Lowlevel Sprache die kompiliert ist und die strukturierte Programmierung unterstützt. Und eine weitere mit der man High-Level objektorientierten Code schreibt und die interpretiert wird. Das Grundproblem von C++ ist, dass es die Notwendigkeit einer Layer-Architektur leugnet und behauptet, man könnte mit einer Sprache alles machen: also sowohl Bibliotheken schreiben als auch Prototypen scripten. Genau das klappt eben nicht. Leider sind dieser Illusion sehr viele Programmierer aufgesessen, so dass viel überflüssige Energie in die Entwicklung von C++ Compilern abfließt, die man woanders besser nutzen könnte. Dabei ist es sachlich ausgeschlosen, dass jemals ein C++ Compiler effizienteren code erzeugen wird als ein C Compiler. Immer wird das Resulat eines C Compilers etwas kleiner sein und sich etwas schneller ausführen lassen. Gleichzeitig ist es ausgeschlossen, dass man mit C++ jemals den Komfort von Python wird erreichen. Warum also nehmen so viele Programmierer die Zwischenposition ein? Das betrifft Java, C++ und C#. Alles sind Programmiersprachen die vorgeben man könnte objektorientierte Compilersprachen praktisch einsetzen.

Nicht ohne Grund hat man in der Betriebssystementwicklung relativ früh das Konzept von Layer entwickelt. Damit ist gemeint, dass man den Kernel als unterste Schicht hat, darauf dann die Systemprogramme und darüber dann die X11 GUI. Technisch gesehen könnte man auch ein Betriebssystem programmieren was alles gleichzeitig kann, so wie das bei Windows gemacht wird. Dadurch steigt jedoch die Komplexität ohne Not an. Besser ist es, sich abgegrenzte Räume zu schaffen innerhalb derer man die volle Leistung entfaltet. Das heißt im Fall von C, dass man dort wo C zum Einsatz kommt man auf Maschineneffizienz achtet, Pointer verwendet um große Datenmengen im Speicher zu halten, sowie die Algorithmen an die Hardware anpasst. Kann man diese Dinge mit objektorientierten Sprachen wie C++ machen? Eher nicht. Dafür wurden diese Sprache niemals konstruiert. Es ist eine dumme Plansprache ähnlich wie Turbo Pascal die für die Lehre entwickelt wurde. Anlass war weniger dass eine neue Sprache für die Praxis benötigt wurde, sondern Bjarne Stroustrups Motivation war ideologisch getrieben. Er wollte ein schnelles Smalltalk haben, also eine objektorientierte kompilierte Sprache. Bei dem späteren Java waren es ebenfalls ideologische Gründe. Bei Java ging es darum, eine Sprache zu schaffen die gleichzeitig auch noch Betriebssystem ist. Sie wurde entwickelt um Windows und Linux abzulösen, also den Java Net-PC zu pushen.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s