AGB  ·  Datenschutz  ·  Impressum  







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

Getter und Setter eines Records inlinen?

Ein Thema von Zacherl · begonnen am 15. Aug 2013 · letzter Beitrag vom 25. Aug 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Getter und Setter eines Records inlinen?

  Alt 15. Aug 2013, 15:11
Delphi-Version: XE2
Hallo zusammen,

ich habe einen kleinen Record, welcher in sehr kompakter Form Daten speichert. Diese Daten werden mit simplen Bit Operationen aus verschiedenen Feldern gelesen und geschrieben. Für den simplen Zugriff habe ich jeweils Properties und entsprechende Getter / Setter erstellt.

Jetzt habe ich mich gefragt, ob es sinnvoll ist diese Methoden mit der inline Direktive zu versehen?

Weiß jemand, wie das Standardverhalten von Delphi in Bezug auf Inlining von Gettern und Settern ist?

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (15. Aug 2013 um 17:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Getter und Setter eines Records inlinen?

  Alt 15. Aug 2013, 16:23
Das ist auf jeden Fall sinnvoll, insbesondere wenn diese Properties häufig angesprochen werden.
Standardmäßig wird nichts inlined wo das nicht dransteht.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Getter und Setter eines Records inlinen?

  Alt 15. Aug 2013, 18:33
Ich habe das auch so gemacht, als ich vor ein paar Tagen (in Freepascal) balancierte Bäume implementiert habe. Ist denke ich definitiv sinnvoll. Interessant wäre nur, ob der Compiler auch die automatisch aufgerufenen Getter und Setter bei Properties inlinen kann, denn schließlich müssen die ja auch für die RTTI zugänglich sein. Das müsste man mal ausprobieren... In meinem Fall gab es aber praktisch eh nur lesende Zugriffe, deshalb habe ich mir die Mühe nicht gemacht, das zu prüfen, sondern mir die Properties gespart und einfach das „Get“ im Funktionsnamen weggelassen und dann die Funktion so benutzt wie eine Property.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Getter und Setter eines Records inlinen?

  Alt 15. Aug 2013, 19:54
Interessant wäre nur, ob der Compiler auch die automatisch aufgerufenen Getter und Setter bei Properties inlinen kann, denn schließlich müssen die ja auch für die RTTI zugänglich sein. Das müsste man mal ausprobieren... In meinem Fall gab es aber praktisch eh nur lesende Zugriffe, deshalb habe ich mir die Mühe nicht gemacht, das zu prüfen, sondern mir die Properties gespart und einfach das „Get“ im Funktionsnamen weggelassen und dann die Funktion so benutzt wie eine Property.
Habs mir grade mal in der Assembler-Ansicht angeschaut und wie es scheint werden die Properties korrekt inlined. Ich habe diese allerdings auch nicht als published, sondern als public deklariert (published funktioniert für Records auch überhaupt nicht, wie ich grade feststellen musste ). Soweit ich weiß werden doch nur published Properties per RTTI zugänglich gemacht oder nicht?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Getter und Setter eines Records inlinen?

  Alt 15. Aug 2013, 20:59
Soweit ich weiß werden doch nur published Properties per RTTI zugänglich gemacht oder nicht?
Schon (zumindest früher, siehe unten), andererseits wäre es ja auch bei puplished Properties theoretisch kein Problem, dann müsste der Code halt zusätzlich noch mal extra im Programm stehen. Ich bin mir bei solchen Sachen nur nie sicher, wie schlau der Compiler wirklich ist...

Allerdings gibt es ja unter neueren Delphis (die ich nicht habe) auch noch diese erweiterte RTTI, ich weiß nicht ob die Regel mit published dort noch gilt.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Getter und Setter eines Records inlinen?

  Alt 15. Aug 2013, 21:12
Soweit ich weiß werden doch nur published Properties per RTTI zugänglich gemacht oder nicht?
Schon (zumindest früher, siehe unten), andererseits wäre es ja auch bei puplished Properties theoretisch kein Problem, dann müsste der Code halt zusätzlich noch mal extra im Programm stehen.
Ja genau, das dachte ich mir auch. Konnte es beim Record leider auf die Schnelle nicht testen, da der überhaupt keine published Methoden erlaubt. Müsste man nochmal mit einer "normalen" Klasse prüfen.

Allerdings gibt es ja unter neueren Delphis (die ich nicht habe) auch noch diese erweiterte RTTI, ich weiß nicht ob die Regel mit published dort noch gilt.
Hat zumindest mal den Anschein. Habe an den RTTI Einstellungen jetzt nichts bewusst geändert.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Getter und Setter eines Records inlinen?

  Alt 15. Aug 2013, 23:55
Published ist der Extended RTTI ziemlich egal. Die kommt sogar an private Felder und Properties dran

Vor ein paar Monaten habe ich mich das auch laut gefragt (siehe: Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public' und heraus kam, dass published praktisch nur für die Deklaration von VCL-Komponenten für das Speichern und Einlesen der Formulare notwendig ist.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Getter und Setter eines Records inlinen?

  Alt 16. Aug 2013, 08:57
Records unterstützen eh nur die Sichtbarkeiten private und public.

Und die Enhanced RTTI ist auch in XE4 bisher unfähig Properties von Record types auszulesen (bzw die RTTI wird vermutlich gar nicht generiert - siehe QC 78110).
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (16. Aug 2013 um 09:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Getter und Setter eines Records inlinen?

  Alt 16. Aug 2013, 09:42
Sie wird für Felder, Attribute und Methoden von Records ausgelesen, aber nicht für Properties. Das sieht man auch sofort im Quelltext des Typs TRttiRecordType:
Delphi-Quellcode:
    function GetDeclaredFields: TArray<TRttiField>; override;
    function GetDeclaredMethods: TArray<TRttiMethod>; override;
    function GetAttributes: TArray<TCustomAttribute>; override;
Nicht überschrieben ist hingegen:
Delphi-Quellcode:
function TRttiType.GetDeclaredProperties: TArray<TRttiProperty>;
begin
  Exit(nil);
end;
Genauso wenig GetProperties.

Wenn ich das aber in der generierten .exe richtig lese, sind die Informationen dort durchaus vorhanden... es gibt nur offenbar in der RTTI keine Möglichkeit sie auszulesen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: Getter und Setter eines Records inlinen?

  Alt 16. Aug 2013, 09:51
Wenn ich das aber in der generierten .exe richtig lese, sind die Informationen dort durchaus vorhanden... es gibt nur offenbar in der RTTI keine Möglichkeit sie auszulesen.
Hast du noch weitere Infos bzgl des Formats, so dass man das nachrüsten kann?
VMT Hack für TRttiRecord Type um die GetDeclaredProperties Methode zu überschreiben ist ja kein Problem
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz