Autor Beitrag
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Fr 22.06.07 09:12 
user profile iconCOMMANDER86 hat folgendes geschrieben:
Ich will ehrlich sein. Ich schreibe auch PHP und genau das oben Stehende ist es, was mich unter PHP nervt. ^^ Ich bin, wie hoffentlich noch einige andere Menschen, auf Pascal/Delphi hängen geblieben, weil:

- es eine logische Sprache ist:
:= Zuweisung
= Vergleich

Das ist mathematisch logisch... eine Stammvoraussetzung, lt. meines damaligen Lehrers, und meinen Gedanken, für logische Programmierung.


Ob die Operatoren nun := und = oder = und == sind, in meinen Augen nur ein oberflächlicher syntaktischer Unterschied. Es ist schön, dass die Delphi-Notation allgemeinen mathematischen Konventionen entspricht, aber einen echten Vorteil sehe ich darin nicht.

user profile iconCOMMANDER86 hat folgendes geschrieben:
Des Weiteren bin ich der Meinung, dass eine Programmiersprache, die nur funktioniert, wenn ensprechende Software vorhanden ist, oder nur startbar ist über eine Netzwerkverbindung, wo die Software (like XAMPP) installiert ist, nicht sonderlich effektiv ist, in der heutigen Zeit, der einfachen Informatik, die jeder verstehen soll...

Sorry, für diesen Satz, der vermutlich falsch geschrieben wurde. ;)


Da Argument kann ich nicht nachvollziehen. Erstmal ist es nicht richtig - PHP existiert auch als Standalone-Interpreter. Ausserdem ist PHP für die Generierung dynamischer Webseiten gedacht. Dass eine Sprache auf ein bestimmtes Anwendungsgebiet ausgerichtet ist, macht sie nicht ineffektiv. Natürlich ist PHP nicht die beste Wahl, um Desktop-Applikationen zu schreiben, aber genauso ist Delphi keine gute Wahl, um Webseiten zu generieren.

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 22.06.07 09:24 
user profile iconStefan.Buchholtz hat folgendes geschrieben:
Ob die Operatoren nun := und = oder = und == sind, in meinen Augen nur ein oberflächlicher syntaktischer Unterschied. Es ist schön, dass die Delphi-Notation allgemeinen mathematischen Konventionen entspricht, aber einen echten Vorteil sehe ich darin nicht.
Zusammen mit der Tatsache, dass man in einer if-Anweisung bei PHP auch Zuweisungen machen kann und einfach Jahre (bei einigen Jahrzehtne ;-)) lang eingetrichtert bekommen hat, dass "=" der Vergleich ist, produziert man da in PHP ziemlich viele Fehler. Wobei die Zuweisung in der if-Abfrage auch praktisch sein kann, gebe ich zu :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Fr 22.06.07 10:23 
Nachtrag zur Fehlerberichterstattung: Die Zeilennummer wäre toll zu wissen, das habe ich aber bisher nur in einer Sprache erlebt ;)

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 22.06.07 10:25 
user profile iconene hat folgendes geschrieben:
Nachtrag zur Fehlerberichterstattung: Die Zeilennummer wäre toll zu wissen, das habe ich aber bisher nur in einer Sprache erlebt ;)

Wie meinst du das?

_________________
Markus Kinzler.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Fr 22.06.07 10:54 
Was mich richtig stört ist, dass der Compiler immer meint er weiß es besser als ich.

Damit meine ich nicht, dass ich die Typsicherheit jetzt doof finde, wobei die schon manchmal nen bischen nervt, sondern vielmehr, dass die Entwickler es geschafft haben son kram auch in Bereiche reinzupacken, wo die Regeln des Compilers keinen Sinn mehr ergeben. Beispiel: Ich hab mal in Assembler mit SSE programmiert und hab über nen ganz normalen 32 Bit Zeiger addressiert. Da schmeißt der mir nen Operand Size Mismatch an den Kopf, bei nem Pointer. Also da hakst bei dem gewaltig.
Andererseits zum Thema Operator Overloading bei Klassen, haben die auf irgendnerseite geschrieben, dass sie sich nicht vorstellen können dass das jemand bei Klassen benutzen würde, denn bei records gibts des ja und son TVektor würde ja jeder mit nem record machen. Sowas ist einfach nur extrem kurzsichtig, zu meinen man weiß wie jeder das für sich entscheiden wird.
Aber das Problem scheints auch woanders zu geben. Offenbar denken die, dass Delphi nur für nen bischen Desktop schön aussehen Mist und Datenbanken benutzt wird und in diesem Bereich Verlässlichkeit alles ist. Tatsache ist, der Compiler ist in Sachen Optimierung so mieß, dass sie sich nur dadurch nen rieseigen Teil professioneller Zielgruppe einfach wegschneiden.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 22.06.07 11:02 
Also das mit dem class operatoren versteh ich auch nicht.
Aber mit deiner Meinung professionell = dreckig hab ich so meine Probleme.
Aber der Compiler an sich sollte mal an aktuellere Prozessoren/Prozessortechniken angepasst werden.

_________________
Markus Kinzler.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Fr 22.06.07 11:16 
Das mit dem Oberflächen Mist das hat sich bei mir so eingebürgert zu sagen ist aber gar nicht böse gemeint. ISt nur die Sache die ich am ungernsten mache.
Hm wo hab ich denn professionell=dreckig gesagt? :(
Ich finde nur, dass man einem Programmierer immer alle Möglichkeiten offen halten sollte das heißt den Entschluss von Java bsp. Pointer rauszukürzen weil die häufig dirty sind finde ich fatal. Ich will gar nicht wiedersprechen, dass dadurch viele Fehler entstehen, aber manchmal sind sie notwendig. Mittel der Wahl wäre sie abzuschalten und über nen Schalter aber auch wider anwendbar zu machen.
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Fr 22.06.07 11:21 
Mittels ERL kann man sich in VBA die fehlerverursachende Zeile ausgeben lassen, dann weiß man gleich wo es hakt. Dafür muss man nur seine Zeile im Code nummerieren, aber dafür gibt es zum Glück Tools ;)

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 22.06.07 11:23 
In Java und auch Delphi gibt es als Ersatz für Zeiger/Referenzen.
Ich hoffe das das jetzt niemand persönlich nimmt, aber ich verstehe unter der Frage "Was Fehlt Delphi" nicht "Welche Features sollte man entfernen".
Delphi ist pascal und sollte auch Pascal bleiben für alle anderen gibt es ja noch VB, aber das lässt in der neuesten Form (VB.Net) auch vieles nicht mehr durch.
@ene: Schon mal was von Eureka oder madExcept gehört

_________________
Markus Kinzler.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Fr 22.06.07 11:32 
Also ich will das bestimmt nicht entfernen ich wills vielmehr beibehalten Zeiger sind was geniales. Meine Angst ist nur, dass die demnächst auch noch goto und Konsorten raushauen weil es nicht "schön" ist. Steht ja schon in der Hilfe das ein richtiger Programmierer sowas eigentlich nicht benutzt.
Mit Optimierungen des Comilers mein ich nicht mal nur die Prozessorarchitektur, sondern hauptsächlich erstmal die Optimierungen am Code. Zum Beispiel erkennen dass wenn ich var1*4 hinschreibe, dass man das shiften kann. Wenn ich (weil ich keine neue Variable einführen will) die Funktion zweimal mit identischen Aufrufen ausführe myfunction(bla1) und inder nächsten Zeile dasselbe er die nicht zweimal aufruft sondern das Optimiert.
Das er obwohl Functions als virtual deklariert wurden wenn ich da direkt den gemeinten Typ angebe die eben auch statisch callen kann etc. Stattdessen haut er mir immer meine debugvariablen raus, weil ich die nicht mehr verwende.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 22.06.07 11:36 
Zitat:
Meine Angst ist nur, dass die demnächst auch noch goto und Konsorten raushauen weil es nicht "schön" ist. Steht ja schon in der Hilfe das ein richtiger Programmierer sowas eigentlich nicht benutzt.
Braucht man auch nicht.

_________________
Markus Kinzler.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Fr 22.06.07 11:45 
Also ich habs schon nen paar mal benutzt. Einfach weil es seinerseits wieder viel zu aufgebläht geworden wäre das mit entsprechenden Schleifen und Bedingungen zu umschließen. Klar kommt man ohne aus aber in manchen Fällen ist das dann genau so schlimm wie das was man verhindern wollte. Außerdem braucht mans wenn man Sprünge in Delphi Assembler mixed Code machen möchte.
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Fr 22.06.07 11:53 
@Markus Bisher noch nicht, aber jetzt. Sieht sehr ähnlich aus. Nur find ichs immer noch Schade, dass man es nicht gleich einbaut.

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 22.06.07 13:19 
@ASM-Sources:
Dass der Compiler manchmal etwas pingelig mit Operandengrößen ist, finde ich sogar in Ordnung ...

Wer meint, in seinem Source unbedingt
ausblenden Delphi-Quelltext
1:
2:
3:
asm
    MOVZX EAX, [ESI]
end;

schreiben zu müssen, der sollte sehr wohl vom Compiler ein paar geknallt bekommen, da diese Anweisung NICHT eindeutig ist: Will ich nun 8 Bit oder 16 Bit von [ESI] in das EAX-Register kopieren und dieses dann mit Nullen auffüllen. Wer jetzt meint, dass muss der Compiler erraten, programmiert nicht sauber. Eine winzige Änderung des Codes in
ausblenden Delphi-Quelltext
1:
2:
3:
asm
    MOVZX EAX, WORD PTR [ESI]
end;

schadet wohl keinem UND erhöht nebenbei sogar die LEsbarkeit.

Dass der Compiler manchmal einfach nur veralteten Source ausgibt, ist dann gleich die nächste Geschichte ... Wir sind inzwischen bei 64-Bit-Prozessoren und erhalten vom Compiler Source, der auf Prozesoren optimal läuft, die vor 15 Jahren Mode waren ... Nostalgie in allen Ehren, aber mindestens MMX und SSE für die Verarbeitung wären eine Verbesserung.

Auch fehlen mir die Generics in Delphi. Die Anonymen Methoden wären zwar Nice, müssen aber nicht sein (Hab mit den Teilen unter Java genug Scheiß angestellt und übersichtlicher wurde es damit nicht wirklich). Was aber interessant wäre, wären die aus Java bekannten Inline-Interfaces als Ersatz für Methoden-Zeiger zu haben. Weilim Wesentlichen sind Methodenzeiger ja nichts als ein Interface mit einer Methode drin, die aufgerufen werden kann.

Wogegen ich bin ist die Abschaffung der Typensicherheit: Genau da liegt ja die Stärke von Delphi ... Wer sauber programmiert, wird in den seltensten Fällen wirklich Probleme mit der Typenprüfung bekommen.

Was mir in diesem Zusammenhang allerdings fehlt, ist die Pointer-Arithmetik aus C:
ausblenden C#-Quelltext
1:
typ* var = somelistofvars, var2 = var + 5;					

Wer einmal uall's Sources gelesen hat, weiß, wieso das für Delphi wünschenswert wäre ;-)

Ferner würde ich mich über einen ECHTEN Präprozessor in Delphi freuen, mit dem eine Makro-Sprache ähnlich wie in C möglich ist. Das hat zwar immer auch den Nachteil, dass es in den falschen Händen einfach nur unübersichtlichen Code produziert, aber
ausblenden Delphi-Quelltext
1:
uses Windows, {$IFDEF Test}Graphics, {$ELSE} QGraphics, {$ENDIF}					

könnte um einiges übersichtlicher über ein Makro geschrieben werden, was einmal am Unit-Anfang steht und dort wenn nötigdas Q vor dem Unit-Namen ergänzt ;-) Außerdem wäre eine solche Funktion für die Übersetzung von C-Headern sehr hilfreich ...

Ferner würd ich mir wünschen, dass CG in Delphi die eingbauten Features nicht nur so oberflächlich implementiert. Was bringt mir Inlining von 3-Zeiligen Pascal-Routinen, wenn die meisten Routinen, die ich inlinen möchte in ASM geschrieben sind (da diese so kurz sind, dass der Overhead des Delphi-Compilers jedes Inlining zu Nichte macht?

Auch würd ich das Operator Overloading mit C-Style bevorzugen, auch wenn ich für die verwendeten Zeichen für Operatoren Einschränkungen einbauen würde:
1. Kein Überladen von Leerzeichen und Tabulatoren ;-)
2. Kein Überladen von Klammern (Auch wenn das sicherlich sehr unlesbaren Code erzeugen würde *G*)
3. Kein Überladen von Buchstaben, Zahlen und Unterstrichen :P
4. Begrenzung auf maximal 5 Zeichen pro Operator

Eine weitere nette Funktion, die mir schon seit langem fehlt, ist das Abschalten bestimmter Funktionen der Funktions- und Klassenbibliothek. Wenn ich für eine Anwendung kein Drag&Drop brauche, dann brauch auch mein Form diese Funktion nicht zu unterstützen. Jeder Code macht eine EXE nur unnötig Größer. Ich hab letztens auf einem Mikrocontroller (MC68HC908GP32) gearbeitet, wo man mit 512 Byte RAM (-64 Byte Stuerregister - Stack) und 32 KB Flash-ROM (-512 Byte Flash Control) auskommen musste. Ein Delphi-Programm in Minimalfassung mit Form passt nicht mal in den Flash-Chip gepasst, geschweige denn in den RAM. Was jetzt nicht heißen soll, dass ich mit Delphi auf nem Mikrocontroller programmiern können möchte, aber wer mal die Delphi-Versionen vergleicht, dem ist sicherlich schon aufgefallen, dass eine leere Form von D3 bis D10 doppelt so großen Code erzeugt, OHNE mehr zu können (außer halt eben leer zu sein).

Auch würde ich mir vom Compiler mal eine VOLLSTÄNDIGE RTTI wünschen. Was bringt es mir, wenn ich für alle Typen außer Pointer und Records ne Typeinfo habe, aber für die elementaren Typen diese nicht zugänglich ist??? Wobei die Typeinfo für Records ja sogar existiert (denn irgendwoher muss ja SetLength wissen, wie groß ein Eintrag eines Arrays von Record-Strukturen ist). Und für Pointer ist das Generieren einer TypeInfo ja auch kein Problem: Pointer der auf einen Typ mit folgender Typeinfo zeigt.

Eine weitere Nette Einschränkung, die der Compiler hat (und die manchmal recht nervig sein kann) ist die relative Adress-Berechnung beim Deklarieren von Konstanten.

Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
const
    TypeInfo_Void : TTypeInfo = (Kind: tkUnknown;);
    TypeInfo_Pointer : TTypeInfo = (Kind: tkPointer; PointerType: @TypeInfo_Void;);


Das Beste, was ich bei solchen Deklarations-Versuchen bekommen hab, waren sinnlose Fehlermeldungen über Typ-Inkompatibilität oder Meldungen, dass die angegebene Adresse nicht Konstant sei ... (H)AHA!!!

Nehmen wir dann noch dazu, dass der Delphi-Compiler nicht optimiern kann, wäre eine weitere Diskussion über wünschenswerte Features sinnlos, da das eine so große Baustelle ist, dass die netten Herren von CG in Jahrzehnten noch nicht wirklich was Brauchbares hätten. Aber wenn ich eine EXE compiliere und den erzeugten Source im Debugger anschaue, dann kommt mir ehrlich gesagt manchmal das Grauen:
Wozu muss ich einen in EAX zurückgelieferten Rückgabewert nach EAX kopieren? Was bringt es, ein Register hin und Zurückzukopieren??? Hat der Compiler noch nichts von Sicheren Annahmen gehört??? Code, der im Wesentliche die Register EAX, EDX und ECX nutzt und die anderen Register unberührt lässt, "weil ja was wichtiges drin stehen könnte" ist einfach nicht zeitgemäß. Wenn der Delphi-Compiler für ne RISC-CPU geschrieben wäre, würde er wahrscheinlich auch alles allein in Register R0 ausführen! :twisted:

Auch das Fehlen einer ordentlichen Klassenbibliothek ist in meinen ein großes Manko von Delphi. Die in Delphi mitgelieferte VCL liefert seit nunmehr 10 Jahren IMMER NOCH KEINEN Unicode-Support und vorhandene AccessViolations auf Grund von Funktionen, die nur für bestimmte OS verfügbar sind (Ich sag nur AlphaBlend := True auf Win98 ;-)) werden lapidar ignoriert mit der Begründung, die QA für diesen Fehler wäre zu Aufwändig ... AHJA!!! Eine einfach If-Abfrage einbauen, die prüft, ob ein Methodenzeiger wirklich gesetzt ist ist also aufwändig und aus Sicht der QA ein kritischer Eingriff in die Integrität des Gesamtsystems. Sorry, aber verscheißern kann ich mich selbst. Zumal in fast allen anderen Routinen genau eben eine solche Abfrage (insbesondere bei Eventhandlern) Standard!!! ist!

Als letzten Wunsch für diesen Post würde ich gern noch die direkte Nutzung von C-Headern für Delphi-Projekte mir wünschen, d.h. ich sag dem Compiler, dass er einen bestimmten C-Header nehmen soll und aus diesem die dort angegebenen Funktionen dem Delphi-Programm verfügbar macht (sei's durch Übersetzen des Headers in eine Unit ODER durch Anbinden des Sources, wie man's vom C++-Builder bzgl. Delphi-Units gewohnt ist).

Naja ... ich will andere auch noch zu Wort kommen lassen ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Fr 22.06.07 13:37 
Grundsätzlich gebe ich dir recht mit den Typgrößen in Asm. Mach ich ja auch nur kenn ich nur byte word dword qword und tbyte aber was muss ich dann vor den 128 Bit Typ für SSE vorsetzen? Außerdem könnte er es dort selbst erraten da man dort gar nichts anderes verwenden kann.
Außerdem ließ sich das schwachsinnigerweise lösen über eine zusätzliche Zuweisung alla:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
//ich hab den Originalcode nicht mehr aber ungefähr so wars:
mov xmm1,[ebp+4*ecx];//geht nicht;
//andere Variante
mov eax,ebp+4*ecx;
mov xmm1,[eax];//das geht auf einmal

bin da nicht mehr so drin vielleicht muss es auch movups oder so heißen.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 22.06.07 13:43 
Typensicherheit ist für mich auch ein großer Vorteil von Delphi, wenn ich mir mal überlege, dass man in PHP ja nun schon mit === auf FALSE prüft, sicher zu sein, dass es nicht 0 ist :roll:

Sehr gewöhnt habe ich mich aber an Type Inference zusammen damit, dass man Variablen an der Stelle deklariert, wo man sie auch braucht.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".