C++: Gedanken eines Java Programmierers

Die meisten meiner bisherigen Softwareprojekte sind im Java-Umfeld gewesen. Ab und an muß man als Programmierer aber auch über den Tellerrand gucken – und wenn man es nur macht, um zu Wissen, wie gut die Suppe zu Hause wirklich ist. Im letzten Jahr habe ich ein größeres C++ Projekt (Visual C Version 6) hinter mich gebracht und möchte nun meine Eindrücke aus dem Blickwinkel eines erfahrenen Java Programmierers wiedergeben.

Meine erste Entdeckung war, daß mein Programmierstil in C++ bei weitem nicht mehr so elegant ist, wie er es in Java war. Der Hauptgrund dafür ist vermutlich die schlechte Unterstützung durch IDEs. Lange Methoden? Mit IntelliJ IDEA kein Problem! Man markiert einfach einen Code Bereich und macht per Refactoring einen Methodenaufruf draus. Dies ist alles anders in C++. Immerhin gibt es Erweiterungen für Visual Studio, die wenigstens rudimentäres Syntax-Highlighting und Refactoring nachrüsten, allerdings funktioniert das bei weitem nicht so gut wie bei Java. Schon bei STL Klassen funktioniert die Codevervollständigung nicht mehr, weil bei unserer Version die Namespace-Deklaration mit Makros gelöst wurde.

Leider habe ich nicht nur mangelnde Tools zu beklagen. Auch die Sprache an sich hat es mir nicht besonders angetan. Trotz Mehrfachvererbung kann man das elegante Interface-Konzept, wie man es aus Java kennt, nur schlecht nachbilden. Besonders bei aufwendigen Vererbungshierarchien stößt man leicht auf komplizierte Compiler Warnungen. Gestört hat mich auch, daß ein Konstruktor einer abgeleiteten Klasse keine Membervariablen der Basisklasse verändern kann. Die Foge davon ist, daß man ggf. die betroffenen Member über einen Konstruktor zugänglich machen muss. Je nach Anzahl von Member Variablen ist das sehr unschön.

Die Operatorüberladung kann praktisch sein, wenn man sie richtig verwendet. Falsch verwendet, bietet sie jedoch auch sehr viel Potential für schwer zu diagnostizierende Fehler.

Für komplexere Aufgaben (z.B. Multithreading) reichen die mitgelieferten Bibliotheksfunktionen leider nicht aus. Viele Entwickler verwenden daher ACE. Leider ist die frei verfügbare Dokumentation katastrophal schlecht.

Ich kann mich nicht erinnern, jemals Probleme mit dem Java Compiler gehabt zu haben. Visual Studio hat mich jedoch regelmäßig mit internen Compilerfehlern konfrontiert. Die meisten konnten durch Vertauschen von zwei benachbarten Zeilen korrigiert werden. Manchmal war jedoch ein größerer Umbau nötig. Es ist jedenfalls beunruhigend, wenn semantisch äquivalente Programme unterschiedliche Ergebnisse des Compilers hervorrufen…

Nach einem Jahr kann ich sagen: Ich habe mich mit der Sprache und den verfügbaren Werkzeugen arrangiert. Gewöhnen oder gar Lieben werde ich dieses Umfeld sicherlich nicht. Dafür bieten die aktuellen Lösungen, die der Steinzeit schon entwachsen sind, einfach zu viel Komfort.

Fazit: Java Entwicklung beschäftigt sich mit Software Architektur, C++ damit, wie man komplexe Problemstellungen dem Compiler beigebracht bekommt.

Nächster fahrplanmäßiger Halt: C# und .NET.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.