AGB  ·  Datenschutz  ·  Impressum  







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

Anonymous Methods/Operationen auf Array

Ein Thema von dmdjt · begonnen am 11. Aug 2015 · letzter Beitrag vom 13. Aug 2015
Antwort Antwort
Dejan Vu
(Gast)

n/a Beiträge
 
#1

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
dmdjt

Registriert seit: 18. Jul 2009
37 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Anonymous Methods/Operationen auf Array

  Alt 12. Aug 2015, 17:11
Danke für die Antwort!

Ich habs befürchtet, dass es einfach nicht geht. Ist ja auch irgendwie logisch.
Die Indirektion bekommt man einfach nicht weg, wenn man Flexibilität braucht.

Ich werde mir Deine Idee mal genauer anschauen! Es ist wieder ein neues Gebiet
zum einlernen. Da findet sich ja einiges positives daran!

Letztlich hatte ich nur die Hoffnung, dass sich vielleicht eine Lösung zur
Compile-Time finden lassen würde.

Die Idee wäre der Deinigen im Prinzip nicht unähnlich:
Während der Entwicklung lässt man einen Platzhalter für die Operation in der
For-Each-Methode und programmiert einfach wie bisher mit der Anonymen Methode.
Beim Compilieren könnte dann der Code der Anonymen Methode in der For-Each-Methode
eingefügt werden. Für jeden Aufruf der For-Each-Methode mit unterschiedlichen
Anonymen Methoden wird eine neue Methode erzeugt.
Aber soetwas wirds vermutlich auch nicht spielen.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: Anonymous Methods/Operationen auf Array

  Alt 13. Aug 2015, 07:56
Nimm VC++, der inlined anonyme Methoden
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
dmdjt

Registriert seit: 18. Jul 2009
37 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Anonymous Methods/Operationen auf Array

  Alt 13. Aug 2015, 08:16
Das wäre ja wirklich ziemlich genau das, was ich (ver)suche...

Wäre es eigentlich möglich ein Plugin für Delphi zu schreiben,
mit zur Compile-Time Code irgendwo eingefügt werden könnte?
Ich hab leider nicht die geringste Ahnung, von Plugins in Delphi!
  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 22:43 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-2025 by Thomas Breitkreuz