Schöne Diskussion. Werde mich darum mal einklinken und ein paar neue Punkte liefern.
Ich bin seit ca. 3-4 Jahren gezwungen teilweise in Delphi 6.0 zu coden.
Komme von Visual C++6.0 (ja ich weiß da gibts auch einige himmelschreiende Probleme und Haken) aber
aus meiner Sicht ist Delphi eine Katastrophe.
Was ich in den letzten Jahren lernen mußte:
In Delphi wird man zum schlampigen Programmieren verleitet.
Bevor jemand in Delphi eine neue Klasse erzeugt macht er sich lieber 3 globale Variablen.
Und mit so einem alten Müll muß ich mich rumschlagen und schwupp sind's 100 globale Variablen.
Alles wird unübersichtlich.
Und die
VCL ist nur für procedurale Vorgehensweise aus dem letzten Jahrhundert geeignet.
Beispiel:
Ich schreibe mir eine kleine Hilfsklasse welche Zugriffe sperrt.
C:
Delphi-Quellcode:
class BLABLA
{
private:
BLABLA(){sperrewas();}
~BLABLA(){gibwiederFrei();}
...
};
// jetzt kann ich an jeder Stelle einfach eine Instanz erzeugen
int neFunktion()
{
BLABLA bla();
..
}
// eine Zeile und alles ist gut. Die Klasse wird erzeugt, macht alles und
// am Ende der Funktion is se wieder wech
das gleiche in Delphi:
Delphi-Quellcode:
type
BLABLA =
class
...
// Soweit OK aber dann:In delphi muß ich erst mal var schreiben dann die Instanz erzeugen,
// initialiseiren dann wieder löschen und zu allem Überfluß hockt das
// blöde Teil nicht auf dem schnellen Stack sondern auf dem lahmen heap
procedure neFunktionInDelphi();
var
bla:BLABLA;
begin
bla:=BLABLA.create;
...
FreeAndNil(bla);
end;
// das wars? Nein denn was is wenn ne Exception ausgelöst wird also
procedure neFunktionindelphi();
var
bla:BLABLA;
begin
try
bla:=BLABLA.create;
...
except
finally
FreeAndNil(bla);
end;
end;
Damit hätten wir 7 unübersichtliche Zeilen in Delphi und 1 Zeile in C++.
Und falls die
Exception weiter geworfen werden muß, dann kommen noch ein paar Zeilen dazu.
In Delphi muß man einfach in jeder Routine Exceptions fangen, falls auch nur ein
Objekt benutzt wird, und diese
Exception weiterschmeißen.
Dies ist das krasseste Problem und meine persönliches Hauptproblem.
Hat jemand mal versucht mit der
VCL in verschiedenen Threads zu arbeiten?
Is nich einfach, wenns überhaupt geht. Man muß immer drauf achten zyklisch ein ProzessMessages
auszuführen sonst steht das ganze Programm 100 Jahre falls eine
VCL Event nicht beendet wird.
Wird dann ein zweites ausgelöst, dann ist das erste Event unterbrochen bis das zweite fertig ist.
Also: Man drückt auf Button 1 und bevor dieser fertig ist auf Button 2. Grande Problema in
VCL.
Natürlich gibt es da einen Workaround, ist aber sehr umständlich und man muß fast alles umstellen.
Es gibt keine STL
OK wurde schon erwähnt aber ist sehr wichtig für mich)
Dieses geniale Tool um mal eben eine Map,Liste,Vektor oder seit einigen Jahren auch einen Hash Table zu erzeugen steht in Dephi einfach nicht zur Verfügung.
Habt Ihr schon mal mit Komponenten in Delphi geschafft. Is echt supi. Alles schnell und schön.
Aber wehe es gibt ein Update und die Entwickler müssen mit verschiedenen Versionen arbeiten.
Ist schlicht nicht möglich.
Dazu kommt eine Projektverwaltung in Delphi 6 die mich zum heulen bringt.
Des weiteren folgen noch so undurchsichtige Sachen wie end mit Punkt mit Stichpunkt oder ohne was.
Je nachdem obs gerade am Ende der Seite oder vor einem else Zweig auftaucht.
Oder die Sache mit den Pointern.
Jeder der auch nur einmal in Delphi mit Pointern umgehen mußte und den Vergleich
zu C/C++ kennt verflucht dieses im Nachhinein in Pascal eingeführete Notkonstrukt.
Nartürlich hats in Delphi auch aus meiner Sicht gute Dinge.
z.B. Ein = Zeichen für den Vergleich (vermeidet viele Fehler), ein Case Statement ohne break.
Die ganze Interface Geschichte ist in Delphi gut gelöst während man sich in C mit leicht in den
Headern verirrt.
Mein Fazit welches ich nach mehreren Jahren gezogen habe.
Für einen kleinen Dreizeiler mit eine paar Dialogen ist Delphi genial einfach.
Um aber auch nur ansatzweise komplexe Stukturen zu erzeugen, eventuell auch noch mit mehreren Leuten,
ist das das schlechteste Mittel der Wahl.
Hubble
P.S. Sollte nun jemand glauben, daß ich mich zum Delhpihasser emtwickelt habe, hat er Recht.