-
Forum: Object-Pascal / Delphi-Language
by himitsu,
10. Mai 2011
Wobei dieses eigentlich wieder über ein Interface und den Typ Variant geht, welcher wiederrum ein Record ist. :stupid:
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
9. Mai 2011
Du kannst da eben nicht manuell aufräumen, denn wenn man da mal weitergeht
a := (b + c) * d + e;
aka
t1 := b + c;
t2 := t1 * d;
a := t2 + e;
oder einfach nur
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
9. Mai 2011
So kompliziert ist es garnicht.
a := 1;
b := 2;
a := a + b;
b := 3
würde nun wie folgt übersetzt
a := TMyRecord.Create(1);
b := TMyRecord.Create(2);
a := TMyRecord.Add(a, b); // a := TMyRecord.Create(a.Value + b.Value);
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
8. Mai 2011
Dafür richtet man einen impliziten Cast für die anderen Typen ein und schon kann man sowas auch für Records hinbekommen.
Was passiert bei x := y; oder y := 123; oder wenn eine Variable freigegeben wird?
Würde man sowas in Delphi implementieren wollen, dann müßte man Objekte automatisch freigeben, was dann den bekannten Prinzipien der Objekte wiedersprechen würde.
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
8. Mai 2011
Erweitern geht sowieso nicht, da Records und normale Typen keine Vererbung kennen :zwinker:
Aber "Record Helper" für normale Typen wäre schon was schönes :cry:
Einen Record, darin einen Integer, noch die ganzen Operatoren und vorallen die implizizen und expliziten Typumwandlungen und schon hast du einen erweiterten Integer.
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
8. Mai 2011
Garnichts ... jedenfalls nicht direkt.
Aber für Operatoren wird eine automatische Speicherverwaltung benötigt und diese ist bei Objekten nicht vorhanden.
Nja, bei Systemen mit einem Garbage-Collector, wird oftmals nahezu alles automatisch verwaltet (es sei denn man schaltet dieses geziehlt ab).
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
6. Mai 2011
Da gibt es z.B. sowas
http://www.delphipraxis.net/122045-beitrag-aus-codelib-geloescht-2.html#post848903
welches man sich so kapseln könnte.
Type
ThMD5 = Record
Data: MD5_CTX;
Procedure Init;
Procedure Update(Input: Pointer; inLen: LongWord);
Function Final: MD5_RES;
End;
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
6. Mai 2011
Das wird und kann sich auch nicht ändern.
Wie gesagt, für Interfaces wäre es eigentlich möglich.
Wobei von mir ja eine der kleinen Mathe-libs als Beispiel diehnt, wie man ein interface danz nett in einem Record verpackt mit Operatoren versehen könnte.
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
6. Mai 2011
Es werden nur die sttischen Daten auf den Stack gelegt, wie die ganzen Grundtypen (integer und Co.), die kleinen Records und die teilweise schon recht großen statischen Arrays.
Bei dynamischen Arrays liegt ja nur der Zeiger auf'm Stack.
nja, ich glaub am Stack haben die nicht viel verändert, aber da man mehr virtuellen RAM zur Vefügung hat, wird man den schon recht hochschrauben können.
Aber...
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
6. Mai 2011
TList<> , die Generische :angle:
Wenn man die Daten an mehreren Stellen verlinken will, dann kommt man mit Objewkten auch besser, da dort die Zeiger schon eingebaut sind.
Bei Objekten muß man den Speicher aber auch überall selber erstellen und diese eventuell auch wieder manuell freigeben.
Ein Array of TObjekt macht da dann schon mehr arbeit, als ein Array of Record.
Einfach ein...
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
6. Mai 2011
Und keine Referenzen/Referenzzählung ... wobei das auch ein Vorteil sein könnte.
Die hab ich vor Jahren schon bei Emba beantragt, es wäre ein Leichtes diese zu integrieren (hab denen sogar gesagt wie),
aber die hören ja nie auf mich.
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
6. Mai 2011
Record = direkter Speicherblock (da hier keine zusätzliche Speicherverwaltung nötig ist, wurden hier die Opertoren eingebaut)
Objekt = Zeiger auf Speicherblock (implizit mit Referenzen), wobei der Speicherblock quasi auch nur ein Record ist
Interface = Zeiger auf Speicherblock (verstecktes Objekt) mit Referenzzählung (OK, eigentlich ein Eintrittspunkt für mehrere Methoden, zur...
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
6. Mai 2011
Wobei Codegear dafür Objekte nutzte (Borland mußte Objekte verwenden),
aber Embarcadero setzt jetzt auch teilweise die Record-Variante ein.
Nja der Hauptgrund für Objekte Records ist die automatische Speicherverwaltung.
Records werden automatisch initialisiert, kopiert und finalisiert. (jedenfalls bei entsprechenden enthaltenen Typen, bei welchen sowas gemacht wird, wie DynArrays, Strings...