Inline

Adam Boduch

Inline - słowo kluczowe języka Delphi dla .NET

W Delphi dla .NET istnieje możliwość wplatania funkcji i procedur. Polega to na opatrzeniu funkcji/procedury słowem kluczowym Inline ? np.:

procedure Foo; inline;
begin
  Console.WriteLine('Procedura wplatana...');
end;

begin
  Foo;
end.

W powyższym przykładzie procedura Foo nie jest wywoływana, jej kod jest kopiowany do miejsca wywołania. Można powiedzieć, że kompilator zastępuje powyższy kod na następujący:

begin
  Console.WriteLine('Procedura wplątana...');
end.

W niektórych przypadkach pozwala to na zwiększenie wydajności aplikacji, lecz zwiększa się przez to rozmiar aplikacji wykonywalnej. Dobrym rozwiązaniem będzie umieszczenie w kodzie programu dyrektywy kompilatora:

{$INLINE AUTO}

Dzięki temu kompilator sam oceni, czy należy wplatać daną procedurę/funkcję, czy też nie.

Zobacz też:

4 komentarzy

W D2006 Win32 inline jest juz obslugiwane:

"The Delphi compiler allows functions and procedures to be tagged with the inline directive to improve performance. If the function or procedure meets certain criteria, the compiler will insert code directly, rather than generating a call. Inlining is a performance optimization that can result in faster code, but at the expense of space. Inlining always causes the compiler to produce a larger binary file. The inline directive is used in function and procedure declarations and definitions, like other directives.
...
The inline directive is a suggestion to the compiler. There is no guarantee the compiler will inline a particular routine, as there are a number of circumstances where inlining cannot be done. The following list shows the conditions under which inlining does or does not occur:
..."

Robilem testy i dziala dla funkcji/procedur globalnych oraz metod (klasy), takze tych zawierajacych petle for..do (z while/repeat nie dziala) - w helphi jest wiecej opisane ;)
Testowane na: Turbo Delphi 2006 Pro [Win32]

Jojersztajner: przyznam sie ze nie widzialem. IMO mozna w tym tekscie o tym napisac.

W Turbo Pascalu i Delphi 1 służyło do pisania procedur bezpośrednio w kodzie maszynowym (kod takiej procedury był wstawiany, a nie wywoływany). A w helpie do Delphi 7 jest tylko:

The reserved word inline and the directive assembler are maintained for backward compatibility only. They have no effect on the compiler.

Ten artykuł można przemianować na ?inline (.NET)? i napisać o ?historycznym? inline :)
// można by też napisać o tym w dziale TP

O ile mi wiadomo to slowo jest rowniez dostepne dla Delphi dla Win32, lecz na platformach 32bitowych nie daje zadnych rezultatow.

Moze warto by bylo wiec dopisac cos o tym?