2010-01-20 17 views
7

Estoy haciendo una aplicación que analiza una o más series de datos usando varios algoritmos diferentes (agentes). Llegué a la idea de que cada uno de estos agentes podría implementarse como scripts de Python separados que ejecuto usando Python C API o Boost.Python en mi aplicación.Seleccionar un idioma incrustado

Estoy un poco preocupado por el tiempo de ejecución por encima de TBH, ya que estoy haciendo un procesamiento de datos bastante pesado y no quiero tener que esperar varios minutos para cada simulación. Normalmente haré cientos de miles, si no millones, de iteraciones en las que invoco los "agentes" externos; ¿Será mejor que solo codificar todo en la aplicación, o será tolerable la caída del rendimiento?

Además, ¿hay otros lenguajes interpretados que pueda usar además de Python?

+1

Vaya con Python/C API. Lo uso en mi aplicación sin remordimientos. –

Respuesta

10

Sí, toneladas.Lua y Python parecen ser los más populares:

incrustación de Lua

Empotrado de Python

Embedding Tcl

Embedding Rubí

Insertar Perl

Insertar JavaScript

Hay docenas de motores de JavaScript en todo, esto es sólo un ejemplo. Algunos de ellos son terriblemente rápidos.

+4

En mi opinión, Lua es probablemente el lenguaje más bien documentado para incrustado, por lo que es un estándar de facto para el desarrollo de juegos. –

+1

De hecho, es muy simple. No me he incrustado pero lo usé en un módulo Garry's Mod personalizado, y usé la API C para pasar cosas. Fue bastante sencillo para mi cerebro de 15 años (que tenía la capacidad informática de una esponja). – Skurmedel

+2

Tcl puede desafiar a Lua como el lenguaje mejor documentado, aunque es subjetivo. También ha existido por más tiempo que Lua. No es tan "caliente" como lua, pero al menos es igual de bueno. –

0

es probable que pueda crear un lenguaje incrustado utilizando plantillas C++ y sobrecarga del operador, vea por ejemplo ublas o los lenguajes de la matriz ftensor. no creo que python u otros lenguajes interpretados sean adecuados para tener numberwrunching/data processing.

1

Para millones de llamadas (de supongo que C++, porque mencionaste impulsar) en python, sí: notarás un golpe de rendimiento. Esto puede ser significativo o no, tal vez la ganancia de velocidad de probar nuevos 'agentes' sería mayor que el golpe. Python tiene bibliotecas numéricas rápidas (como numpy) que pueden ser útiles, pero aún tendrá gastos generales de recopilación de datos, llamadas a python, gil, etc.

Sí, puede incrustar muchos otros idiomas: check out lua. Además, consulte swig.org, que puede conectarse a muchos otros idiomas además de Python.

3

Me suelen a estar haciendo cientos de miles, si no millones, de iteraciones en el que invoco los externos "agentes"

La caída de rendimiento será notable, tal vez doloroso. Si puede poner los datos en matrices y procesarlos en lotes usando NumPy, debería ser mucho más rápido.

NumPy hace que sea muy fácil hacer cualquier tipo de aritmética un millón de veces seguidas. Por ejemplo, elevar al cuadrado cada elemento de una matriz es así:

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

Super fácil, y el bucle interior apretada aquí se llevan a la práctica C.

Por supuesto NumPy también puede hacer más avanzado procesamiento de datos numéricos .

5

Tcl fue diseñado desde cero para ser un lenguaje incrustado.

+0

Misma respuesta que parte de la mía mientras editaba. +1 por genio obvio. :-) –

+1

Lua también fue diseñado desde cero para ser un lenguaje incrustado. – lhf

+1

@lhf: sí, hay varios idiomas que se han diseñado desde cero para ser integrados. –

2

Creo que tcl y Rexx fueron pensados ​​para este propósito.

9

Lua es bastante rápido como es. Si necesita más velocidad, intente LuaJIT, que es excelente.