also C sollte in Punkto Programmiereffizienz, Debugging, Modularität und so weiter wohl für keinen eine ernsthafte Konkurrenz zu Java sein. Nachdem ich den umgekehrten Weg gegangen bin, finde ich C ziehmlich grauslich, vorallem was Speicherschutz (bei mir Segfaultet vom xmms bis hin zu rm! wirklich alles ab und zu), dynamische Datenstrukturen (generische Collections in ANSI C gehören ganz klar in die Kategorie "verbrechen an der Menschheit") und Namespaces (Alles in einem riesigen Symboltable) angeht. Außerdem liefert der Compiler viel schlechtere Fehlermeldungen. Absoluter Hassfaktor: unions.
Als Gegenbeispiel: kann sich das ein Javaprogrammierer antun?:
#define SHORTSTRING
int strcmp_for_a_generic_list (void* e1, void*e2) {
return strcmp((char*)e1,(char*)e2);
}
generic_list* list = list_create(&strcmp_for_a_generic_list);
union data* data1 = (data*) malloc (sizeof(data);
data->diskriminante = SHORTSTRING;
data->shortstring->string=strdup("hallo");
list_add(list,data1);
free(data1);free(list);
}
Alles anzeigen
Selbst in der kleinen Funktion können schon vier Segfaults auftreten. Ganz abgesehen davon, dass man (imho) nich feststellen kann, ob eine beliebige Struktur vom Client schon initialisiert wurde (eine Abfrage gegen (void*) 0 hilft auch nichts, wenn der Pointer munter z.B. auf 0xFFFFFF (void*-1) zeigt. Außerdem gibts keine Möglichkeit festzustellen, welchen Typ ein Pointer hat.
JA, es ist schnell, verdammt schnell, aber mir kommt vor manche von euch freuen sich, weils so eine tolle Programmiersprache ist.
Ich weiß ja nicht, wer von euch OOP gemacht hat, aber die Beispiele von dort möchte ich in reinem C (ohne ++) nicht realisieren.
Und C++ ist für meinen Geschmack ein bisserl zu kompliziert und auf rückwärtskompatibel getrimmt (wie so vieles).
Java ist auf jeden Fall eine wunderschöne objektorientierte Sprache - dass es langsam ist, es keine gscheiden Graphiklibraries usw. gibt und es damit vermutlich nicht allzu praxistauglich ist, sei eine andere Geschichte.
P.S.: Pointer braucht man nicht.Klar, sogar mit brainfuck kannst du alles programmieren. Viel wichtiger: Pointer sind ein direkter Zugriff auf den Speicher, der außerhalb des Systemnahen Programmierens nicht gerade für ein stabiles System sorgt.
Aber: Pointer funktionieren schon ein bisserl anders als Referenzen, eben eine direkte Referenz auf den Speicher.