Delphi-PRAXiS
Seite 22 von 68   « Erste     12202122 232432     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Delphi 2011 heißt jetzt Delphi XE (https://www.delphipraxis.net/153609-delphi-2011-heisst-jetzt-delphi-xe.html)

himitsu 11. Aug 2010 21:46

AW: Delphi 2011 heißt jetzt Delphi XE
 
Zitat:

Zitat von xZise (Beitrag 1041357)
Es gab keine Enumeratoren in Delphi 7?

Kommt drauf an, was du meinst.

Delphi-Quellcode:
type myEnum = (a, b, c);
gab's schon, aber die Enumerator-Klassen, welche z.B. für das For-In genutzt werden, wurden zusammen mit dem For-In eingeführt.

Zitat:

AFAIK wird das dort auf Basis von UTF8 gemacht. Handelt man sich aber andere Problem ein als wenn man es wie "üblich" auf UTF16-Basis wie Java/.NET/Windows macht.
Liegt das nicht daran, daß FPC, bzw. viele APIs der VCL und Co. noch "Ansi" waren, aber Lazarus nun Unicode unterstützen wollte?
UTF-8 kann man ja quasi auf Ansi mappen.

Stevie 12. Aug 2010 05:48

AW: Delphi 2011 heißt jetzt Delphi XE
 
Zitat:

Zitat von xZise (Beitrag 1041357)
PS: Operatoren gibt es inzwischen auch für Klassen.

Nö, die Trottel haben den Fehler in der Auflistung der neuen Features seit Delphi7 nur noch nicht gefixt.
Da steht:
Zitat:

Delphi allows certain functions, or operators, to be overloaded within record declarations
aber darunter steht eine Klassen Deklaration... und das geht nicht.

Anstatt ihrer Sch**** SVN Integration, UML Designern (vor allen sie zeigen nur Reverse Engeneering, oder? Wen interessiert das? Das und viel mehr konnte Modelmaker schon vor Jahren) und sonstigem Fluff sollten sie mal die QC abarbeiten und derbe Fehler in der RTL/VCL fixen und die Generics endlich komplett benutzbar machen. Ich stoß dauernd an Stellen wo ich mir nur denke, toll in C# würd das gehen... Beispiel?
Hab versucht, den CommonServiceLocator auf Delphi zu portieren:
Delphi-Quellcode:
type
  IServiceLocator = interface
    function GetInstance<TService>(): TService;
  end;
Möööp! Interfaces unterstützen keine parametrisierten Methoden... :wall:

xZise 12. Aug 2010 05:51

AW: Delphi 2011 heißt jetzt Delphi XE
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1041376)
Zitat:

Zitat von xZise (Beitrag 1041357)
Reflection ist doch eine Funktion der IDE,

Nee. Reflection ist die aufgebohrte RTTI damit man halbwegs das machen kann was per Reflection in .NET/Java auch möglich ist.[…]

Ach mist :oops: dachte Reflection wäre Refactoring :D

MfG
Fabian

himitsu 12. Aug 2010 05:54

AW: Delphi 2011 heißt jetzt Delphi XE
 
Das kann auch nicht/nie mit Objekten (Klassen) funktionieren, höchstens bei Interfaces wären es noch möglich.

Delphi-Quellcode:
var A, B, C: TObject;

A := B + C;
Denn wer soll jetzt dafür sorgen, daß eine Klasse in A auch ordnungsgemäß freigegeben wird, wenn da nun eine neue Klaee als Rechenergebnis reinwöllte?
Speicherlecks ohne Ende.
A einfach freizugeben geht auch nicht, da Delphi ja nich wissen kann, ob dieses Objekt noch wo anders in Verwendung ist.

Stevie 12. Aug 2010 05:58

AW: Delphi 2011 heißt jetzt Delphi XE
 
Zitat:

Zitat von himitsu (Beitrag 1041405)
Das kann auch nicht/nie mit Objekten (Klassen) funktionieren, höchstens bei Interfaces wären es noch möglich.

Delphi-Quellcode:
var A, B, C: TObject;

A := B + C;
Denn wer soll jetzt dafür sorgen, daß eine Klasse in A auch ordnungsgemäß freigegeben wird, wenn da nun eine neue Klaee als Rechenergebnis reinwöllte?
Speicherlecks ohne Ende.
A einfach freizugeben geht auch nicht, da Delphi ja nich wissen kann, ob dieses Objekt noch wo anders in Verwendung ist.

Imo kein großes Problem, ist auch nich viel anders als die Kombination von Copy constructor und Assign/AssignTo

himitsu 12. Aug 2010 06:07

AW: Delphi 2011 heißt jetzt Delphi XE
 
Nein, da Delphi keine automatische Referenzzählung bei den Objekten besitzt.

Delphi-Quellcode:
C := TZahl.Create(789);
D := C;

A := TZahl.Create(123);
B := TZahl.Create(456);
C := A + B; // function TZahl.Add(x, y: TZahl);
             // begin Result := TZahl.Create(x.num + y.num); end;
WriteLn(C.num);
Wenn man jetzt einfach so die alte Zahl in C freigeben würde, dann wäre der Objektzeiger in D nun fehlerhaft, da man ihm das Objekt unterm Arsch geklaut hat.
Macht man mit dem alten Objekt in C nichts und dieses Objekt wäre sonst nirgendwo referenziert, dann entstünde ein Speicherleck.


Mit Interfaces ist es also möglich, da man dort weiß wieviele Referenzen es auf die enthaltenen Objekte/Interfaces gibt und kann es somit freigeben.
Bei Records ist garnichts nötig, da dort die Speicherbereiche direkt vorliegen (quasi ein RefCount von 1).
Darum hab ich bei meinen MatheLibs auch in dem Record ein Interface gekapselt, da ich so die Vorteile eines Interfaces (Referenzzählung), mit den Operatoren der Records kombinieren konnte.

Stevie 12. Aug 2010 06:26

AW: Delphi 2011 heißt jetzt Delphi XE
 
Dir ist schon klar, dass das nicht das Problem von operatoren auf Klassen ist sondern das des Programmierers, der hier lustig Objekte gegenseitig zuweist? Wenn per Definition ein Operator ein neues Objekt erzeugt ist allen klar, dass sie bei einer Zuweisung von a := b + c vorher a sichern oder freigeben müssten, wenn da was drin steht. Was hat das bitte mit Operatoren zu tun, das wäre bei jeder normalen Methode die ein Objekt zurück gibt genauso.

himitsu 12. Aug 2010 06:47

AW: Delphi 2011 heißt jetzt Delphi XE
 
Weil Delphi/Emba bei einem Versuch die Operatoren, Aufgrund der Natur der Objekte, bei den Objeten zu implementieren, nur scheitern kann, da man hier eben nichts "sicher" abfragen kann.
(ungültige Objektzeiger und unbekannte Mehrfachreferenzen)

Was denkst du denn, warum es nicht für Objekte implementiert wurden ist, sondern eben nur für Records?
(die Interfaces hatten die wohl einfach nur vergessen)

mkinzler 12. Aug 2010 06:52

AW: Delphi 2011 heißt jetzt Delphi XE
 
Dieses Problem dürften andere Sprache, welche mit Referenzen haben dann auch haben. das Problem besteht ja auch, wei schon gwschrieben auch so.

Delphi-Quellcode:
var
    a,b,c: TObject;
begin
    ...
    a := b;
Auch hier existiert das ursprüngliche Objekt, welches a referenziert weiter.

Oder

Delphi-Quellcode:
var
   a: TOject;
begin
   ...
   a := Tobject.Create;
   ...
   a := Tobject.Create;
...

Stevie 12. Aug 2010 06:53

AW: Delphi 2011 heißt jetzt Delphi XE
 
Zitat:

Zitat von himitsu (Beitrag 1041416)
Was denkst du denn, warum es nicht für Objekte implementiert wurden ist, sondern eben nur für Records?

Weil sie dort genauso wie bei vielen anderen Sachen nicht zu Ende gedacht haben? :stupid:
Nee, ernsthaft, wahrscheinlich würde es theoretisch gehen, nur würds wohl mehr Verwirrung stiften und Fehler hervorrufen es nützen würde.
überschreibt mal fix den Zuweisungsoperator für einige Klassen, muhaha :twisted:

P.S.: Da fällt mir gerade ein... würden die operator Überladungen dann vererbt? Japp, das könnt wohl richtig derb nach hinten losgehen, wenn man da was falsch macht :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 Uhr.
Seite 22 von 68   « Erste     12202122 232432     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz