Einzelnen Beitrag anzeigen

Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#15

AW: Generics - Pro und Contra

  Alt 24. Mai 2014, 11:11
Jupp, daß Generics eher Templates sind, wo man die Typprüfung schon beim Parsen des Templates macht, anstatt dort nur eine Syntaxprüfung vorzunehmen und die eigentliche Typprüfung erst bei der Verwendung zu machen ... also das ist schrottig und behndert die Nutzung der Generics teilweise extrem.
Ich persönlich find es gut, dass die Typüberprüfung bereits bei der Definiton des Generics stattfindet. Das hilft Fehler schneller zu finden, als wenn du das erst bei der Spezialisierung mit einem bestimmten Typ hast... Free Pascal ist hier etwas laxer und hat zum Beispiel kein Problem damit, wenn du T.Something für ein T schreibst, das keinen Constraint hat...

Was bei den Generics ausfällt, ist daß der Code in der Unit ist, wo der generische Typ entgültig definiert wurde und mir scheint es manchmal auch so, als wenn er dann bei mehreren Units auch mehrmals einkompiliert wird.
Das hat sx2008 bereits recht gut erläutert.

Zur Laufzeit werden dann noch RTTI Daten erzeugt (bei normalen Klassen geschieht dies zur Compile-time).
Du meinst doch sicher zum Zeitpunkt der Spezialisierung zur Compilezeit, oder? Dass die RTTI Daten rein zur Laufzeit erzeugt werden, kann ich mir nicht wirklich vorstellen...

Wenn das Generic + Datentyp(en) nur im Abschnitt implementation auftaucht dann weiss der Linker nicht dass es dieses konkrete Generic schon gibt.
Und so kommt es, dass genau der gleiche Code in mehreren Units stecken kann ohne dass der Linker diese Duplikate zu einem zusammenführen kann.
Der Linker könnte schon den gleichen Code zusammenfassen, indem er nach gleichem Code sucht. Aber Embarcadero möchte das gar nicht, sonst hätte ich das schon längst zu XE2 Zeiten als Linker-Aufsatz bereitgestellt.
Weißt du, warum Embarcadero das nicht möchte? Für Free Pascal plane ich nämlich in Zukunft genau das als Whole Program Optimization Option anzubieten... (und zusätzlich will ich den Compiler beim Spezialisieren überprüfen lassen, ob die selbe Spezialisierung bereits im Interface einer verwendeten Unit vorkommt, damit er diese dann verwendet; das macht FPC aktuell nämlich nicht, dazu muss ich aber erst class var in Verbindung mit Generics korrigieren)

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat