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
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.853 Beiträge
 
Delphi 12 Athens
 
#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
Benutzerbild von JamesTKirk
JamesTKirk

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

AW: Getter und Setter eines Records inlinen?

  Alt 25. Aug 2013, 13:39
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?
Ein kleiner Nachtrag bezüglich inline : Auch wenn Code als inline markiert ist und der Compiler auch tatsächlich entscheidet zu inlinen, bleibt der Code trotzdem als normal aufrufbare Funktion/Prozudur/Method vorhanden, da man ja auch Funktions-/Methodenzeiger verwenden könnte, um die Funktion aufzurufen. Inlinen geschieht auch unabhängig von der RTTI.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  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 20:29 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 by Thomas Breitkreuz