Einzelnen Beitrag anzeigen

WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
141 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: Warnung vor massivem Einsatz von Generics in Delphi

  Alt 18. Dez 2024, 08:06
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?
Waldemar Derr
Profil bei GitHub

Geändert von WladiD (18. Dez 2024 um 08:13 Uhr)
  Mit Zitat antworten Zitat