![]() |
AW: Störende Elemente der Delphi-Syntax / Vorschläge für neuen Dialekt
Zitat:
Delphi-Quellcode:
, für jeden Typ, egal ob Klasse, Record oder primitiver Datentyp wie Integer. Diese Unterscheidung von class helpern und record helpern ist redundant, weil der Datentyp, auf den sich der Helper bezieht, ja ohnehin klar ist. Und falls man mal aus einem Record eine Klasse macht oder umgekehrt, müsste man nicht auch noch zusätzlich alle Helper-Definitionen anpassen.
Helper
Delphi-Quellcode:
Damit wären sehr moderne Konstrukte und modulare Programmierung möglich.
type
TFormHelper = helper for TForm procedure FadeOut(); end; TRectHelper = helper for TRect procedure Normalize; function ContainsPoint(Pt: TPoint): Boolean; end; TIntHelper = helper for Integer function ToString: string; end; |
AW: Störende Elemente der Delphi-Syntax / Vorschläge für neuen Dialekt
Zitat:
Aber dann wäre es nicht mehr ganz kompatibel zum alten Code. Zitat:
Für Objekte sind Operatoren leider nicht möglich, der fehlenden automatischen Speicherverwaltung wegen, aber wenn man die Copy/Create/Destroy-Ereignisse einführt, würde es dennoch einen Weg geben. :angle: |
AW: Störende Elemente der Delphi-Syntax / Vorschläge für neuen Dialekt
Mein Wunsch geht zwar über Syntax hinaus, und dafür würden mich sicher hier gerne einige vermöbeln, aber ein Delphi mit GC wäre schon sexy. Ich weiss, es gibt da diverse Fummelein mit Interfaces und Hacks, aber ein richtiger "ab Werk" GC ist einfach eine riesen Komfortsteigerung (wenn er vernünftig umgesetzt ist). Was ich in C# ab und an gern mache, und in Delphi ab und an wünschte, ist sowas wie
Delphi-Quellcode:
, und die Instanz dann einfach verpuffen lassen. (Ja, das sieht nach einem Designfehler aus, man meint die Methode hätte statisch sein sollen - aber so schlau sind leider nicht alle Fremdkomponentenhersteller.) Oder auch so Späße, bei denen Instanzen über mehrere Threads eher "locker umher geworfen" werden würden mit einem GC etwas weniger Kopfschmerzlastig.
lokaleVarMitRückgabewert := TMyFooClass.Create(aParameter).SomeMethod(aNotherParameter);
Vielleicht sogar als alternativer Konstruktor, ggf. mit Einführung des new-Operators!
Delphi-Quellcode:
Mit etwas Unterstützung in der IDE (anderes Highlighting für GC'ed Instanzvariablen) wäre so ein Hybrid glaube ich sogar einigermaßen handlich.
bar := TMyFooClass.Create(); // <- normal ohne GC
bar := new TMyFooClass(); // <- GC'ed |
AW: Störende Elemente der Delphi-Syntax / Vorschläge für neuen Dialekt
@Medium:
Das ist eine verdammt gute Idee! Was mich an GC-Sprachen bisher insbesondere gestört hat, war, dass man den GC nicht einfach abstellen konnte. Ich habe über eine Hybridschiene schon nachgedacht, aber da bin ich immer zur Kollision gekommen. Der Einfall, die Objekte einfach durch einen anderen Konstruktor zu erzeugen ist ein genialer Ansatz. Das wäre allerdings ein Punkt, den ich allein nicht umsetzen könnte, weil ich a) von GC-Bau keinen Schimmer habe und b) auch keinen kenne, den man zu dem Zweck in die Ausgabedatei einfach automatisch einbinden könnte. Die bisherigen Punkte würde ich mir zutrauen, aber ein Hybrid-GC ginge über meine Fähigkeiten hinaus. |
AW: Störende Elemente der Delphi-Syntax / Vorschläge für neuen Dialekt
Zitat:
Ansonsten hast du ein Problem, da plötzlich aus Diesem ein "reserviertes" Wort werden würde. In Delphi also nicht möglich, obwohl es auch ohne GC technisch möglich wäre, wenn man den "new"-Operator auf die ".Create"-Constructoren umleitet. Wenn man Klassen direkt als Interface markieren könnte, bei deren Deklaration, ohne vorher einen extra Interface-Typen manuell deklarieren zu müssen (der Compiler würde dann aus den Public/Published-Dingen dass Interface automatisch generieren), dann hätte man quasi auch einen GC für diese Objekte. (über die Technik der Generics eventuell machbar, also wenn Emba das implementiert) Über einen Precompiler könnte ich sowas auch selber nachrüsten. :stupid: |
AW: Störende Elemente der Delphi-Syntax / Vorschläge für neuen Dialekt
Mich würde jetzt auch mal genauer interessieren, was ihr von der Unit-Umstellung von Interface/Implementation auf Public/Private/Implementation haltet. Stimmt ihr mir zu oder haltet ihr das für überflüssig?
Was haltet ihr von der Methodengruppierung? |
AW: Störende Elemente der Delphi-Syntax / Vorschläge für neuen Dialekt
Zitat:
Zitat:
Grüße |
AW: Störende Elemente der Delphi-Syntax / Vorschläge für neuen Dialekt
Im Prinzip eigentlich nicht notwendig.
Interface = Public Implementation = Private Protected gibt's da nicht, bzw. es ist sinnlos, da die Vererbung fehlt und es somit dem Private entspricht. Das Property ohne Klasse könnte nett sein, für globale Variablen oder Singletons. Aber da man solche Globalen sowieso besser vermeiden sollte, bringt es eigentlich nicht viel. Die Methodengruppierung finde ich unübersichtlich. Seh ich irgendwo in der Implementation ein
Delphi-Quellcode:
, dann denke ich das wäre eine Prozedur und nicht daß sich da irgendwo noch ein
procedure irgendwas;
Delphi-Quellcode:
verstecken könnte, welches dieses zu einer Methode macht.
begin
Zwei Klassen, mit einer gleichnamigen Methode, dann stehen unten zwei Prozeduren, welche man nicht direkt einer der Klassen zuordnen kann, ohne vorher nach einem "begin" zu suchen, um zu sehn ob und wenn ja zu welcher Klasse es gehört. |
AW: Störende Elemente der Delphi-Syntax / Vorschläge für neuen Dialekt
Zitat:
Zitat:
nichtmethodische Routinen = Prozeduren und Funktionen, die keiner Klasse angehören
Delphi-Quellcode:
Wie die Gruppierung aussehen soll, steht nicht fest (wie allgemein noch nichts), im Entwurf im oberen Post sah sie so aus:
procedure TXyz.DoSmthng; // Methode
function IntToStr(AValue: Integer): string; // keine Methode
Delphi-Quellcode:
implementation
TXyz: begin procedure Xyz; begin // Do something end; end; end. Zitat:
Zitat:
Zitat:
|
AW: Störende Elemente der Delphi-Syntax / Vorschläge für neuen Dialekt
Zitat:
Dieser Operator ist ein Makel, den fast alle Sprachen von C erben. Ich finde es semantisch viel schöner, wenn der Konstruktor wie eine klassenstatische Methode ist, die eine Instanz zurückliefert. Die Klasse selbst ist für die Erzeugung ihrer Instanzen zuständig. Ist das nicht wunderschön OO? :love: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz