Einzelnen Beitrag anzeigen

Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Anonymous Methods/Operationen auf Array

  Alt 12. Aug 2015, 07:42
Imho nein. Außer vielleicht Assembler.

Es ist schon meistens so, das Flexibilität (insbesondere saubere Architektur und Code) nicht mit Performance einhergeht, zumindest was die letzten 10% anbelangt. Hier ist das sogar extremer, aber es ist logisch, denn der Unterschied zwischen 'a[i] := a[i]*2' und einer anonymen Methode mit Parameter, Rückgabewert, Aufruf und Rücksprung' ist schon gewaltig.

Was Du allerdings machen könntest, wäre eine 'kompilierende Scriptengine' zu nehmen, die Dir den Code kompiliert, d.h. Du hast deine Funktionen als Quellcode vorrätig (bzw. den Rumpf) und baust Dir dann eine Funktion zusammen, à la:
(Hier ist das Template)
Delphi-Quellcode:
Procedure $Name$ (var a : TMyArray);
var
  i : Integer;
  $localVariables$

begin
  $Initialize$
  for i:= low(a) to High(a) do begin
    $CodeToInject$
  end
end;
In deiner Bibliothek von Manipulationen steht dann z.B.
Code:
Name=MultiplyBy2
localVariables=
Initialize=
CodeToInject=a[i] := a[i]*2
oder
Code:
Name=Fibionacci
localVariables= f : integer;
Initialize= f:= 0;
CodeToInject= a[i] := a[i]+f; f:=a[i];
Du ersetzt also die Platzhalter ('$blabla$') durch die konkreten Codeschnipsel.
Beispiel:
Delphi-Quellcode:
Procedure Fibionacci (var a : TMyArray);
var
  i : Integer;
  f : integer;

begin
  f:= 0;
  for i:= low(a) to High(a) do begin
    a[i] := a[i]+f; f:=a[i];
  end
end;
Als 'kompilierende Scriptengine' kannst Du FPC nehmen, d.h. Du erzeugst einfach aus dem o.g. Code eine DLL, bindest die dynamisch ein, und rufst die Methode auf. Dann ist das genauso schnell wie Delphi selbst.

Geändert von Dejan Vu (12. Aug 2015 um 07:45 Uhr)
  Mit Zitat antworten Zitat