Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Warnung vor massivem Einsatz von Generics in Delphi (https://www.delphipraxis.net/216359-warnung-vor-massivem-einsatz-von-generics-delphi.html)

WladiD 17. Dez 2024 18:35

AW: Warnung vor massivem Einsatz von Generics in Delphi
 
Zitat:

Zitat von Rolf Frei (Beitrag 1544393)
Hat Delphi 12.2 nicht einen 64 Bit Compiler und Linker erhalten, der aber idiotischerweise nur in der Enterprise+ Version enthalten ist. Ist damit das Memory Problem nicht gelöst? Oder mache ich hier ein Durcheinander?

Es ist zumindest eine Zwischenlösung, wenn das jeweilge Projekt wieder kompiliert werden kann, bei der die 32-bittige dcc32.exe sonst scheitert.

Das Problem dabei ist jedoch, dass ein entsprechend großes Projekt eine große RSM-Datei erzeugt. Diese wird auch zum lokalen Debuggen benötigt, wenn man das Projekt über MS-Build erzeugt. Das heißt, im ungünstigen Fall kann man vielleicht wieder kompilieren, aber nicht mehr debuggen, weil die IDE in ihr Speicherlimit reinläuft. Bei uns ist gleich beim ersten Debug-Versuch die bds.exe bei über 2GB. Nach einigen weiteren Debug-Versuchen kommt die geliebte EOutOfMemory...

himitsu 17. Dez 2024 19:11

AW: Warnung vor massivem Einsatz von Generics in Delphi
 
Jupp, alles, was nicht 32 Bit ist, muß ja remotegedebuggt werden, da die IDE und der InlineDebugger ja nur 32 Bit sind.

Vielleicht, wenn in 25 Jahren dann wieder, wenn die IDE auch 64 Bit ist.


Wobei es dennoch irgendwie komisch ist, dass die "gleichen" Debuginfos jeweils so unterschiedlich groß sind.

Dass eine billige ZIP-Komprimierung aber so extrem viel einspart, lässt einen irgendwie denken, dass da viel "nichts" drin steckt.

TurboMagic 17. Dez 2024 19:17

AW: Warnung vor massivem Einsatz von Generics in Delphi
 
Naja, ich glaube schon, dass wir viel früher als in 25 Jahren eine 64 Bit IDE sehen werden.
Nur wäre es natürlich klasse, wenn man den Speicherbedarf auch ohne Wechsel auf 64 Bit senken
könnte.

Die Methode "viele Hardware Ressourcen auf ein Problem zu schmeißen" ist ja auch nicht gerade
umweltfreundlich und kann auch an ihre Grenzen stoßen...

jaenicke 17. Dez 2024 20:23

AW: Warnung vor massivem Einsatz von Generics in Delphi
 
Zitat:

Zitat von TurboMagic (Beitrag 1544402)
Naja, ich glaube schon, dass wir viel früher als in 25 Jahren eine 64 Bit IDE sehen werden.

Was Marco Cantù auf der EKON gesagt hat, war so ungefähr:
Sie haben eine lauffähige 64-Bit IDE, die aber noch nicht stabil genug ist. Sie werden diese in den nächsten Monaten so weit haben, dass man damit zumindest testen kann. Und als erstes müssen ja z.B. die Komponentenhersteller ran. Von daher gehe ich mal davon aus, dass eine wirklich relativ normal für alle nutzbare 64-Bit IDE Richtung 2026 kommen könnte. Und dazwischen irgendwann eine Beta für alle.
Wie gesagt: Das ist meine Erinnerung und Interpretation dessen, was ich dort gehört habe.

Zitat:

Zitat von TurboMagic (Beitrag 1544402)
Nur wäre es natürlich klasse, wenn man den Speicherbedarf auch ohne Wechsel auf 64 Bit senken
könnte.

Da wurde ja auch schon dran gearbeitet, aber es sind halt auch sehr viele Informationen. Und wenn ich sehe, dass Visual Studio für ein echt sehr kleines Projekt schon 1,5 GiB Arbeitsspeicher benötigt und zum Kompilieren noch einmal 200 MiB dazu kommen, dann finde ich nicht, dass Delphi besonders viel braucht. Der Unterschied ist halt die plattformbedingte Beschränkung des Arbeitsspeichers bei Delphi.

Zitat:

Zitat von TurboMagic (Beitrag 1544402)
Die Methode "viele Hardware Ressourcen auf ein Problem zu schmeißen" ist ja auch nicht gerade
umweltfreundlich und kann auch an ihre Grenzen stoßen...

Bei den heutigen PCs, insbesondere Entwicklermaschinen, halte ich es aber für sehr sinnvoll, möglichst viel im Arbeitsspeicher für schnellen Zugriff zu halten.

Stevie 17. Dez 2024 21:28

AW: Warnung vor massivem Einsatz von Generics in Delphi
 
Zitat:

Zitat von DevidEspenschied (Beitrag 1544342)
Wenn man die Unit C erstellt, TList<Integer> dort einfügt, ihr einen bestimmten Typnamen gibt und diese Unit und diesen Typ verwendet, greift das Ganze auf die allgemeine Typverwendung zurück. Der Unterschied ist meines Wissens nach sehr signifikant

Leider falsch.

Zitat:

Zitat von freimatz (Beitrag 1544388)
Habe ich es dann richtig verstanden? Statt
Delphi-Quellcode:
TCountList = TList<Integer>;
TWidthList = TList<Integer>;
TLengthList = TList<Integer>;
Wäre es dann also besser es so zu machen?
Delphi-Quellcode:
TIntegerList = TList<Integer>;

TCountList = type TIntegerList;
TWidthList = type TIntegerList;
TLengthList = type TIntegerList;

Kompiliert leider nicht - E2574 - siehe auch https://quality.embarcadero.com/browse/RSP-27505

Zum allgemeinen Thema:
Hab ich schon 2014 bzw 2017 gesagt - siehe:
https://delphisorcery.blogspot.com/2...-annoying.html
https://quality.embarcadero.com/browse/RSP-18080

Zitat:

Zitat von WladiD (Beitrag 1544292)
Ich bin ein Fan von Generics, aber unter diesen Umständen kann ich vom weiträumigen Einsatz in großen Delphi-Projekten nur abraten!

Zur konkreten Problematik bzgl Spring4D 2.0 - es mag an den speziellen Typen liegen die ihr in den generischen Parametern nutzt, speziell wenn das sehr viele verschiedene record Typen sind, dann gibt es leider keine Möglichkeit, die Code folding Techniken anzuwenden, die ich in 2.0 eingebaut habe, aber ggf andere Möglichkeiten.

Zitat:

Zitat von WladiD (Beitrag 1544292)
generische Typen, entweder aus der internen Basisbibliothek oder aus dem Spring-Framework abzuleiten und zu verwenden

Ich weiß nicht, in welchem Maße ihr von den Klassen aus Spring4D ableitet, aber je nachdem wie ihr das macht und diese dann verwendet, kann das erst das Problem verursachen, was ich mit 2.0 massiv reduziert habe.

Schick mir gern eine pm oder email, wenn ihr diesbezüglich Hilfe von mir benötigt.

himitsu 17. Dez 2024 21:54

AW: Warnung vor massivem Einsatz von Generics in Delphi
 
Zitat:

Delphi-Quellcode:
TIntegerList = TList<Integer>;

TCountList = type TIntegerList;
TWidthList = type TIntegerList;
TLengthList = type TIntegerList;

Da das Klassen sind, kann man doch auch noch anders ableiten. :gruebel:
Delphi-Quellcode:
TIntegerList = TList<Integer>;

TCountList = class(TIntegerList);
TWidthList = class(TIntegerList);
TLengthList = class(TIntegerList);

WladiD 18. Dez 2024 07:06

AW: Warnung vor massivem Einsatz von Generics in Delphi
 
Zitat:

Zitat von DevidEspenschied (Beitrag 1544342)
Entwicklern steht eine sehr wichtige Lösung, ein Workaround oder ein Hack zur Verfügung: die wiederholte Deklaration für dieselbe generische Typinstanz vermeiden. Zur Verdeutlichung: Ein generischer Typ ist TList<T>, eine generische Typinstanz ist TList<Integer>. Wenn man TList<Integer> in Unit A und Unit B hat, dann hat man zwei Typen, wobei alle Methoden in jede der beiden (oder 200) Units kopiert werden. Wenn man die Unit C erstellt, TList<Integer> dort einfügt, ihr einen bestimmten Typnamen gibt und diese Unit und diesen Typ verwendet, greift das Ganze auf die allgemeine Typverwendung zurück. Der Unterschied ist meines Wissens nach sehr signifikant und wir wissen, dass es bei vorhandenem Code etwas mühsam ist...

Hallo David,

den Workaround über einen Typ-Alias für generische Interfaces hat ein Kollege schon vor einem Jahr probiert. Die Erkenntnis war damals, dass es nichts gebracht hat. Ich habe auch ein ähnliches Experiment in einem isolierten Test-Projekt durchgeführt und bin zum gleichen Ergebnis gekommen, aber ich muss zugeben, dass meine primäre Metrik die Größe der resultierenden Exe war und nicht die Größe der einzelnen DCUs. Dies ist wiederum auf die gute Arbeit des Linkers zurückzuführen.

Gestern hat ein Kollege, auf ihren Post hin, wieder ein Testprojekt gebaut und dort kann man tatsächlich feststellen, dass ein Alias IListString = IList<String> etwas gebracht hat, wenn die zugehörige Factory (TCollections.CreateList<String>) nicht in der konsumierenden Unit vorkommt, sondern über eine eigene Factory-Funktion in einer dedizierten Unit bezogen wird.

Das ist schon mal eine interessante neue Erkenntnis.

Da ich gerade dabei bin...
Wie ist Ihre Aussage bezüglich einer 64-Bit-IDE?
Wann gibt es ungefähr die erste Beta?

freimatz 18. Dez 2024 08:57

AW: Warnung vor massivem Einsatz von Generics in Delphi
 
Zitat:

Zitat von WladiD (Beitrag 1544413)
Da ich gerade dabei bin...
Wie ist Ihre Aussage bezüglich einer 64-Bit-IDE?
Wann gibt es ungefähr die erste Beta?

Bitte nicht, sondern separat. Das Thema Generics ist schon gross genug. :-D

MyRealName 18. Dez 2024 09:04

AW: Warnung vor massivem Einsatz von Generics in Delphi
 
Zitat:

Zitat von freimatz (Beitrag 1544416)
Zitat:

Zitat von WladiD (Beitrag 1544413)
Da ich gerade dabei bin...
Wie ist Ihre Aussage bezüglich einer 64-Bit-IDE?
Wann gibt es ungefähr die erste Beta?

Bitte nicht, sondern separat. Das Thema Generics ist schon gross genug. :-D

Ein Pun der feinsten Klasse, I commend you, good sir!

freimatz 18. Dez 2024 09:09

AW: Warnung vor massivem Einsatz von Generics in Delphi
 
Zitat:

Zitat von himitsu (Beitrag 1544406)
...
Da das Klassen sind, kann man doch auch noch anders ableiten. :gruebel:
Delphi-Quellcode:
TIntegerList = TList<Integer>;

TCountList = class(TIntegerList);
TWidthList = class(TIntegerList);
TLengthList = class(TIntegerList);

:shock: Äh - na klar geht auch. Vermutlich sogar etwas schöner.
Und hilft das?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 Uhr.
Seite 3 von 4     123 4      

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