AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Generics - Pro und Contra

Ein Thema von stahli · begonnen am 23. Mai 2014 · letzter Beitrag vom 27. Mai 2014
Antwort Antwort
Benutzerbild von JamesTKirk
JamesTKirk

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

AW: Generics - Pro und Contra

  Alt 24. Mai 2014, 10: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
jbg

Registriert seit: 12. Jun 2002
3.485 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: Generics - Pro und Contra

  Alt 24. Mai 2014, 10:48
Ich persönlich find es gut, dass die Typüberprüfung bereits bei der Definiton des Generics stattfindet.
Mir wären C++ Templates lieber gewesen, dann müsste man nicht für jeden Typ einen eigenen Comparer nutzen, der allein durch den Aufruf der Compare-Funktion nicht an die Performance eines direkten "Wert1 = Wert2" herranreicht.

Weißt du, warum Embarcadero das nicht möchte?
Das kann ich nur erahnen:
  • Der Debugger würde nicht den korrekten Datentyp für T anzeigen, da ein T=Integer mit einem T=TObject in manchen Funktionen zusammenfallen könnte. (Wobei das bei einem Release-Build nur Stacktraces betreffen würde)
  • Wenn sie Arbeit in die Compiler-Optimierung stecken würden, müssten sie zugeben, dass ihre Aussage "size doesn't matter nowadays" falsch ist. (wie kommt man auf die Idee das solche Monster von APKs für Smartphones gut wären)
  • Sie haben keine Zeit das einzubauen, sind ja mit ihren Mobile-Compilern beschäftigt (denen auch mal eine Performance-Optimierung gut tun würde)
  • Mein Patch würde die Frage aufwerfen, wer für fehlerhaftes Verhalten beim Endkunden einstehen müsste. (das Totschlag Argument, wenn sie es nicht selbst entwickeln wollen)

Mein Patch funktioniert übrigens nur rudinemtär mit XE2, weil ich "gestoppt wurde".

Geändert von jbg (24. Mai 2014 um 10:50 Uhr)
  Mit Zitat antworten Zitat
Patito

Registriert seit: 8. Sep 2006
108 Beiträge
 
#3

AW: Generics - Pro und Contra

  Alt 26. Mai 2014, 14:02
Ich persönlich find es gut, dass die Typüberprüfung bereits bei der Definiton des Generics stattfindet.
Mir wären C++ Templates lieber gewesen, dann müsste man nicht für jeden Typ einen eigenen Comparer nutzen, der allein durch den Aufruf der Compare-Funktion nicht an die Performance eines direkten "Wert1 = Wert2" herranreicht.
Container-Libraries waren für mich immer der wichtigste Grund Generics haben zu wollen.
Wenn ich jetzt aber sehe, dass ich meine Container (Maps, Multimaps, ...) ganz klassisch
schneller, kleiner und einfacher hinbekomme, fällt es mir nicht wirklich schwer auch
ganz auf Generics zu verzichten.

Ein simpler Typsicherer Wrapper für eine TObjektList mag noch ok sein, aber das reicht dann schon.
Komplexere Konstrukte gehören für mich in einen Code-Generatoren (mit so vielen Parametern und
Einstellungsmöglichkeiten wie man will) oder Metasprachen (die nach Pascal compilieren).
Man muss dafür nicht auch noch die ohnehin schon überladene Pascal-Syntax quälen.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#4

AW: Generics - Pro und Contra

  Alt 26. Mai 2014, 14:49
Ein simpler Typsicherer Wrapper für eine TObjektList mag noch ok sein, aber das reicht dann schon.
Wobei das als Template mit kleinen Tricks auch schon in Delphi 5 ging.

Aber das ist ja nur der kleinste Teil der Vorteile von Generics. Allerdings sieht man oft die Möglichkeiten gar nicht. Das sieht man relativ oft, wenn jemand Generics noch nicht oft benutzt hat.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Generics - Pro und Contra

  Alt 26. Mai 2014, 15:42
Aber das ist ja nur der kleinste Teil der Vorteile von Generics. Allerdings sieht man oft die Möglichkeiten gar nicht. Das sieht man relativ oft, wenn jemand Generics noch nicht oft benutzt hat.
Kennt dazu jemand ein gutes Tutorial oder Blogeintrag, der einen alle Schweinereien mal auflistet?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#6

AW: Generics - Pro und Contra

  Alt 26. Mai 2014, 15:51
Man findet schon in der Hilfe einiges, z.B. so etwas:
http://docwiki.embarcadero.com/RADSt...ts_in_Generics

Und ansonsten ist das Grundprinzip ja immer das gleiche, aber es ist so ähnlich wie objektorientierte Programmierung. Es reicht nicht aus OOP um der OOP willen anzuwenden, sondern man muss auch so denken, wenn man Strukturen entwirft. Das gilt für Generics genauso.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.212 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Generics - Pro und Contra

  Alt 26. Mai 2014, 17:18
Ich denke auch- In der reinen Benutzung ist bei Delphi eigentlich im Vergleich zu Java (Autoboxing ausgenommen, also sogar eigentlich besser als bei Java) oder C++ Templates genau gleich. Da kann man denke ich x-beliebige Lektüre nehmen.

Das "Hallo Welt" der Generics sind meistens wohl generische Stacks, also beispielsweise ein Integer oder Float-Stapel, je wie man grade lustig ist.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Generics - Pro und Contra

  Alt 27. Mai 2014, 10:37
Es reicht nicht aus OOP um der OOP willen anzuwenden, sondern man muss auch so denken, wenn man Strukturen entwirft. Das gilt für Generics genauso.
Das fällt mir etwas schwer!
Aber ich möchte gerne diese Hürde überwinden.

Was da rein technisch passiert ist mir schon halbwegs klar, nur komme ich ohne griffige Beispiele nicht so wirklich dahinter, wozu man das konkret brauchen könnte.

Bspw. der Quellcodeschnipsel aus dem DocWiki:
Delphi-Quellcode:
 type
   TFoo<T: ICloneable> ...
 
   TTest1 = class(TObject, ICloneable)
      ...
   end;
 
   TError = class
   end;
 
 var
   X: TFoo<TTest1>; // TTest1 wird hier auf ICloneable-Unterstützung
                     // zur Compilierzeit überprüft
Inwiefern kann sowas im richtigen Quelltext Anwendung finden?
Wo sind die Vorteile gegenüber, ich sage mal, herkömmlichen Lösungen?


Mit den meisten Design Pattern geht es mir ähnlich.
Wenn ich das noch nicht selbst programmiert / implementiert habe, bleibt es nebulös im Hirn.
Erst wenn ich versuche diese Pattern umzusetzen - und sei es mit simplen Beispielen wie Kaffeezubereitung (http://www.oreilly.de/catalog/hfdesi...apter/ch03.pdf) - macht es bei mir Klick.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.
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