Autor Beitrag
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 06.05.05 23:24 
Ich hab auf den KDT gehört, dass Delphi 9 Inlining von Prozeduren und Funktionen unterstütz und hab es heute aus langeweile mal einen Blick in die Hilfe von D9 gewagt ... Ich hätts bleiben lassen sollen, da ich nicht mehr aus dem Lachen raus kam ... :lol:

Denn: Inlining wird Unterstützt, wenn man die Ausnahmen weglässt (die etwa 90% der sinnvollen Anwendungen dieser Technik abdecken).

Was meine ich damit:
- Inlining von Prozeduren mit ASM-Code (geht nicht)
- Inlining von Zirkulär verbundenen Units (nur von extra-zirkulären Referenzen)
- Inlining von Prozeduren mit Open Arrays (geht nicht)
- Inlining über Packagrenzen hinaus (geht nicht)
- Inlining von Methoden, die auf Referenzen geringerer Sichtbarkeit zugreifen (geht nicht)
- Inlining von Prozeduraufrufen in While- und Repeat-Schleifen (geht nicht)

Warum baut Borland die Inline-Direktive ein, wenn sie in 90% der Fälle nicht genutz werden kann? Dann hätten die das doch eigentlich auch gleich bleiben lassen können???

Für alle die das nicht kennen: Inlining wird in C\CPP meist über Makros realisiert (bzw. über die __inline__-Direktive in der Deklaration einer Routine, um Programme zu beschleunigen, zu Lasten der Dateigröße. Dabei wird der Source einer Procedure\Function einfach an den benötigten Stellen in eine andere Routine eingebettet, anstatt diese aufzurufen. Das erspart CALL-Instructions und beschleunigt dadurch das Programm, da der Prozessor seinen L1\Instruction-Cache nicht ständig neu aufbauen muss.

P.S.: Einige Ausnahmen sind nachvollziehbar ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 07.05.05 01:18 
Bei Delphi wirkt halt viel Compiler-Magic mit und da wird es halt recht kompliziert, Fälle wie "Inlining von Prozeduren mit Open Arrays" zu realisieren. Dass "Inlining über Packagrenzen hinaus" nicht funktioniert ist ja klar, ohne Source kann man schlecht inlinen.
Inlining ist ohnehin etwas kompliziert zu realisieren. Delphi unterstützt ja eigentlich nicht mal das Kreieren von lokalen Variablen inmitten einer Funktion. Mit Inline wird das plötzlich (indirekt) möglich, usw.. Ich kann mir aber schon vorstellen, dass in zukünftigen Versionen mehr Inlining möglich ist.
Ich finde es vor allem praktisch bei kleinen Read- und Write-Funktionen (im Zusammenhang mit Properties) - und dort funktionieren sie.
Ich bin jedenfalls froh, dass es jetzt Inlining gibt. (Jetzt fehlen nur noch Templates. Ich finde übrigens das Object Pascal von Chrome absolute Spitze.)
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 07.05.05 01:35 
Bei den Read-\Write-Funktionen ist das auch zweischneidig: Nur solange die Prozedur nicht auf weniger sichtbare Elemente zugreift ... Wenn also deine Lesefunktion Protected ist und ein Private-Feld lesen wöllte, würde Delphi dies als Inline verweigern ...

Aber die Geschichte, die ich am ehesten als Anwendung gesehen hätte (Inlining von ASM-Routinen), funktioniert es leider überhaupt nicht, auch wenn man dies unter der Bedinung "Programmierer ist selbst verantwortlich, dass außer EAX, EDX und ECX alles erhalten bleibt" mit einer Compiler-Warnung (Unsicheres Inlining: ASM-Routine" hätte realisieren können. Sonst ist man doch auch nicht so, für jeden Müll sich ne Warnung einfallen zu lassen.

Anwendung, die mir konkret vorgeschwebt hätte: Inlinen der ASM-Optimierten Fassungen der in den OMath*-Units deklarierten ASM-Routinen, da meist der CALL länger als deren Ausführung benötigt und die wenigsten Routinen aus mehr als 10 Opcodes bestehen..

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 07.05.05 01:40 
Stimmt, bei den ASM-Funktionen versteh ich's auch nicht. Interessant: Früher (Borland Pascal?) war das nämlich möglich, deswegen ist inline jetzt noch ein reserviertes Wort.

PS: Ich muss dich noch korrigieren:
Zitat:
Procedures and functions used in conditional expressions in while-do and repeat-until statements cannot be expanded inline.
Das heisst doch lediglich, dass Prozeduren und Funktionen in der Abbruchbedingung (und auch anderen Bedingungen?) nicht geinlinet werden.
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 28.01.09 19:14 
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
PS: Ich muss dich noch korrigieren:
Zitat:
Procedures and functions used in conditional expressions in while-do and repeat-until statements cannot be expanded inline.
Das heisst doch lediglich, dass Prozeduren und Funktionen in der Abbruchbedingung (und auch anderen Bedingungen?) nicht geinlinet werden.

Auch wenn dieser Thread schon etwas älter ist:

Jap, das heißt es. Ein Source a la
ausblenden Delphi-Quelltext
1:
While GeinlinteRoutine do {...}					

wird NICHT geinline werden, selbst wenn dies wahrscheinlich zu effizienterem Code führen könnte (ich sag nur Short Circuit Evaluation von Boolean Expressions).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.