2010-01-20 17 views
7

Sto creando un'applicazione che analizza una o più serie di dati utilizzando diversi algoritmi (agenti). Sono giunto alla conclusione che ognuno di questi agenti potesse essere implementato come script Python separati che eseguo usando l'API Python C o Boost.Python nella mia app.Selezione di una lingua incorporata

Sono un po 'preoccupato per il sovraccarico di runtime TBH, dato che sto elaborando dati piuttosto pesanti e non voglio dover attendere alcuni minuti per ogni simulazione. Generalmente realizzerò centinaia di migliaia, se non milioni, di iterazioni in cui invoco gli "agenti" esterni; sto meglio solo di codificare tutto nell'app o il calo delle prestazioni sarà tollerabile?

Inoltre, ci sono altri linguaggi interpretati che posso utilizzare oltre a Python?

+1

Vai con l'API Python/C. Lo uso nella mia applicazione senza rimpianti. –

risposta

10

Sì, tonnellate.Lua e Python sembra essere il più popolare:

Embedding Lua

Embedding Python

Embedding Tcl

Embedding rubino

Embed Perl

Embed JavaScript

ci sono decine di motori JavaScript in giro, questo è solo un esempio. Alcuni di loro sono anche spaventosamente veloci.

+4

A mio parere, Lua è probabilmente il linguaggio più ben documentato per embedded, è uno standard di fatto per lo sviluppo del gioco. –

+1

In effetti, è molto semplice. Non l'ho incorporato io stesso ma l'ho usato in un modulo Mod di Garry personalizzato e ho usato l'API C per passare le cose. Era abbastanza semplice per il mio cervello allora di 15 anni (che aveva la capacità di calcolo di una spugna.) – Skurmedel

+2

Tcl può sfidare Lua come il linguaggio più ben documentato, anche se è soggettivo. È anche stato più lungo di Lua. Non è così "caldo" come Lua, ma è almeno altrettanto buono. –

0

potresti probabilmente creare un linguaggio incorporato utilizzando i modelli C++ e l'overloading dell'operatore, vedi ad esempio i linguaggi ublas o ftensor matrix. non penso che Python o altri linguaggi interpretati siano adatti per avere il numero/elaborazione dei dati.

1

Per milioni di chiamate (da sto assumendo C++, perché hai citato boost) in python, sì: noterai un successo in termini di prestazioni. Questo può o non può essere significativo - forse il guadagno in velocità di provare nuovi "agenti" sarebbe maggiore del colpo. Python ha delle librerie numeriche veloci (come numpy) che potrebbero essere d'aiuto, ma continuerai ad incorrere nel marshalling dei dati, chiamando python, il gil, ecc.

Sì, puoi incorporare molte altre lingue: controlla lua. Inoltre, controlla swig.org, che può connettersi a molte altre lingue oltre a python.

3

mi sarà tipicamente facendo centinaia di migliaia, se non milioni, di iterazioni in cui invoco gli "agenti" esterni

Il calo di prestazioni sarà evidente, forse dolorosa. Se è possibile inserire i dati in array e elaborarli in batch utilizzando NumPy, dovrebbe essere molto più veloce.

NumPy rende super facile eseguire qualsiasi tipo di aritmetica un milione di volte di seguito. Ad esempio, squadratura ogni elemento di un array è così:

>>> x = numpy.array([1, 2, 3, 4, 5, 6, 7]) 
>>> x**2 
array([1, 4, 9, 16, 25, 36, 49]) 

Super facile, e il ciclo interno stretto qui è effettivamente implementata in C.

Naturalmente NumPy può anche fare più avanzata di elaborazione numerica .

5

Tcl è stato progettato da zero per essere un linguaggio incorporato.

+0

La stessa risposta come parte mia mentre stavo modificando. +1 per evidente genio. :-) –

+1

Anche Lua è stato progettato da zero per essere un linguaggio incorporato. – lhf

+1

@lhf: sì, ci sono diverse lingue che sono state progettate da zero per essere incorporate. –

2

Credo che tcl e Rexx fossero entrambi destinati a questo scopo.

9

Lua è abbastanza veloce così com'è. Se hai bisogno di più velocità, prova LuaJIT, che è eccellente.