Auswählen einer eingebetteten Sprache

7

Ich mache eine Anwendung, die eine oder mehrere Datenreihen mit verschiedenen Algorithmen (Agenten) analysiert. Ich kam zu der Idee, dass jeder dieser Agenten als separate Python-Skripte implementiert werden könnte, die ich entweder mit der Python C-API oder Boost.Python in meiner App ausführe.

Ich mache mir ein bisschen Sorgen wegen der Laufzeit-Overhead-TBH, da ich eine ziemlich schwere Datenverarbeitung durchführe und ich nicht für jede Simulation mehrere Minuten warten muss. Ich werde in der Regel Hunderttausende, wenn nicht Millionen von Iterationen machen, in denen ich die externen "Agenten" anrufe; bin ich besser, nur alles in der App hardcoding, oder wird der Leistungsabfall erträglich sein?

Gibt es noch andere interpretierte Sprachen, die ich außer Python verwenden kann?

    
Rune Aamodt 20.01.2010, 18:04
quelle

7 Antworten

10

Ja, Tonnen. Lua und Python scheint am beliebtesten zu sein:

Einbetten von Lua

Einbetten von Python

Einbettung von Tcl

Einbetten von Ruby

Perl einbetten

JavaScript einbinden

Es gibt Dutzende von JavaScript-Engines, dies ist nur ein Beispiel. Einige von ihnen sind auch erschreckend schnell.

    
Skurmedel 23.05.2017, 10:29
quelle
9

Lua ist ziemlich schnell wie es ist. Wenn du mehr Geschwindigkeit brauchst, probiere LuaJIT , was hervorragend ist.

    
lhf 09.02.2011 21:24
quelle
5

Tcl wurde von Grund auf als eingebettete Sprache konzipiert.

    
Bryan Oakley 20.01.2010 19:08
quelle
3
  

Ich werde in der Regel Hunderttausende, wenn nicht Millionen von Iterationen machen, in denen ich die externen "Agenten" anrufe.

Der Leistungsabfall wird spürbar, vielleicht schmerzhaft. Wenn Sie die Daten in Arrays einfügen und sie mit NumPy stapelweise verarbeiten können, sollte es viel schneller sein.

NumPy macht es millionenfach möglich, arithmetische Berechnungen durchzuführen. Zum Beispiel ist das Quadrieren jedes Elements eines Arrays wie folgt:

%Vor%

Super einfach, und die enge innere Schleife hier ist tatsächlich in C implementiert.

Natürlich kann NumPy auch fortgeschritteneres Zahlen-Knirschen machen.

    
Jason Orendorff 20.01.2010 18:35
quelle
2

Ich glaube tcl und Rexx waren beide für diesen Zweck bestimmt.

    
T.E.D. 20.01.2010 19:14
quelle
1

Bei Millionen von Aufrufen (von mir nehme ich C ++ an, weil du Boost erwähnt hast) in Python, ja: Du wirst einen Leistungseinbruch bemerken. Dies kann wichtig sein oder auch nicht - vielleicht wäre der Geschwindigkeitsgewinn beim Ausprobieren neuer "Agenten" größer als der Treffer. Python hat schnelle numerische Bibliotheken (wie zB numpy), die helfen könnten, aber Sie werden immer noch Overhead für das Marshalling von Daten, das Aufrufen von Python, der Gil usw. erleiden.

Ja, Sie können viele andere Sprachen einbetten: Schauen Sie sich lua an. Sieh dir auch swig.org an, das neben Python auch viele andere Sprachen erreichen kann.

    
Colin 20.01.2010 18:19
quelle
0

Sie könnten wahrscheinlich eine eingebettete Sprache mit C ++ - Vorlagen und Operatorenüberladung erstellen, siehe z. B. Ublas- oder Ftensor-Matrixsprachen. Ich denke nicht, dass Python oder andere interpretierte Sprachen von Numbercrunching / Datenverarbeitung geeignet sind.

    
Anycorn 20.01.2010 18:12
quelle

Tags und Links