Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.016 Beiträge
 
Delphi 12 Athens
 
#1

RTTI-Umfrage/Erfahrungen?

  Alt 4. Mai 2014, 23:24
Moin,

hier geht es jetzt mal nicht um was Wichtiges/Schlimmes.
Ich wollte einfach nur mal soeinen kleinen Überblick erlangen, in wie weit eigentlich die RTTI verwendet wird.

Wer nutzt denn die RTTI?
Vorallem wie oft, in welchem Umfang und wofür eigentlich?
Lieber die Alte, oder doch eher die Neue/Erweiterte? (hier ist, für ältere Delphis, die Antwort schon klar)

Die alte RTTI ist oftmals leichtgewichtiger/flotter und nicht alles der alten RTTI findet sich (genauso einfach) in der neuen erweiterten RTTI.
Die neue RTTI hat mit Multithreading eventuell einige Problemchen (da werden globale Instanzen verwendet), während die Alte meist nur blind direkt auf schreibgeschützten Pointern arbeitet und da praktisch nichts passieren kann.

* Daten/Objekte (de)derialisieren, für Speicherung/übertragung
- über die alte RTTI aus System/TObject/TypInfo, sowie TReader/Writer (das nutzt auch immernoch die VCL) und Teilweise auch im Variant (wobei dort oft auch einfach hart gecastet wird)
- oder nur noch mit der neuen RTTI.pas (TRttiContext)

* Hacking/Bugfixing
- via RTTI
- über doofe Zeiger "blind" zugreifen

* als zusätzliche Informationsquelle, um die Dokumentation zu ergänzen

* als Hilfe zum Debuggen
- TVirtualMethodInterceptor
- Zugriffe und Daten überwachen/auslesen

...




Und nun noch ein kleiner neugieriger Blick in die IDE, den die RTTI lässt sich ja nicht nur im eigenen Programm benutzen.

Da speichert die RTTI standardmäig jede Kleinigkeit, außer da, wo sie doch praktisch wäre. (bei Interfaces, wenn nicht explizit mit {$M+} deklariert)
Von fast 8500 Interfaces besitzen nur 40 ein paar mehr Infos (wie z.B. Name und Deklaration der Methoden), als nur die IID (GUID), Unit der Deklaration und die Anzahl der Methoden.


Aber witzig ist, daß die gesamte RTTI der Delphi XE3 Prof-RTL/VCL/FMX/IDE als Text nur 21 MB groß ist und schlappe 40800 Typen umfasst, davon etwa 17000 Klassen und 8500 Interfaces.
Im RAD Studio XE6 Architekt Trial sind es 23 MB und genau 46000 Typen (inkl. meiner 2 Test-Interfaces), davon 11444 Interfaces ohne und 7 mit Methoden-RTTI. (das Fehlende waren zufällig die MSXML6-Interfaces in einer gewissen DevJET_DI_XE3_Express.dll)


Nja, ein passendes Interface hab ich wenigstens gefunden, für eine geplante IDE-Erweiterung ... jetzt nur noch rausfinden, wie man es genau benutzt, denn es gibt nirgendwo Infos. Google kennt nur 2 Steiten, wo das Interface zufällig in einem Stacktrace auftaucht und die 2 Kommentare der OpenToolsAPI sind eher als spärlich zu bezeichnen. (aber das ist hier erstmal egal)
Miniaturansicht angehängter Grafiken
unbenannt.jpg  
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Mai 2014 um 23:35 Uhr)
  Mit Zitat antworten Zitat