ich habe jetzt schon länger nichts mehr mit C++ gemacht, obwohl ich schnelle, kleine Programme liebe.
Leider hat es auch ein paar Nachteile, die dazu geführt haben, dass ich mich jedesmal etwas sträube, ein neues Projekt anzufangen. Meine Auflistung nach persönlichen Vorlieben und Nachteilen:
Gut:
- Nativer Code
- RAII
- Keine Runtime-Typ-Info (wenig Overhead)
- Stack-Variablen (schnell)
- Keine Garbage-Collection
- Redundanz durch .h/.cpp
- Meinung: STL sieht eklig aus (wieso vector statt list, wieso kein collection interface? Hat bestimmt seine Gründe, finde ich aber unintuitiv)
- Kompilierzeit
- Namespace-Syntax ist umständlich
- Manuelle Erstellung von Verzeichnissen für Namespaces nötig
- Template-Magie ist kompliziert und unübersichtlich
- Keine Compile-Time Typ-Info (z.B. zur automatischen Serialisierung; ja, widerspricht sich eventuell mit dem Punkt oben)
In C++ hätte ich ebenfalls gerne Klassen, die in einem Namespace sind, im gleichnamigen Verzeichnis. Dazu fällt mir nur die Möglichkeit ein, jedesmal beim Erstellen einer Klasse in Visual Studio den Verzeichnisnamen per Hand zu ändern und dann um die ganze Datei oben "namespace XYZ {" und unten "}" zu schreiben. Das mag für einige eine Kleinigkeit sein, aber mich stört es jedesmal. Weiß jemand, ob ich nur Möglichkeiten der IDE übersehe oder sich der Vorgang vereinfachen lässt?
Zweiter dicker Punkt: Es wäre viel schöner, wenn ich die gesamte Klasse wie in Java in einer einzigen Datei hätte. Kann jemand einschätzen, wieviel Aufwand es wäre, einen Translator zu schreiben, der eine Datei automatisch in .h- und .cpp-Dateien zerlegt?
Mir ist bewusst, dass Translatoren einen Haufen Nachteile mit sich bringen, aber es wäre ein Anfang. Später kann man vielleicht ein LLVM-Frontend schreiben (auch wenn ich damit noch gar keine Erfahrung habe). Nach und nach kann dann die Sprache modifiziert werden, bis ich bei meiner persönlichen, idealen Sprache angelangt bin. ;) Es geht nur um Programme für mich selber und um meine persönliche Vorlieben, ich möchte explizit nicht die neue Super-Duper-Sprache für die Wirtschaft schreiben.
Code: Alles auswählen
namespace XYZ;
#include <iostream>
class MyClass
{
private int a;
MyClass(int a) {
this->a = a;
}
public int getA() {
return a;
}
};
int main()
{
MyClass myInstance(3);
std::cout << myInstance.getA() << endl;
return 0;
}
Natürlich soll es auch normale Funktionen geben.
Vielleicht könnt ihr mir ein paar Denkanstöße geben, wie die Punkte am besten umgesetzt werden könnte. Oder einfach eure Meinung dazu sagen.
Ich freue mich auf eure Antworten.
Gruß
Psycho