¿Alternativas a Lua como lenguaje embebido?


Estoy trabajando en un sistema embebido que ejecuta Linux en un DSP. Ahora queremos hacer que algunas partes de él sean scriptables y estamos buscando un buen lenguaje de scripting incrustable. Estos scripts deben integrarse bien con nuestra base de código C++ existente, ser pequeños y rápidos.

Entiendo que Lua es la opción de la industria para problemas como este. Probablemente iremos con Lua porque está probado y probado y demostrado ser estable y así sucesivamente. Sin embargo, como lenguaje de programación tiene algunos peculiar esquinas.

Entonces, ¿qué alternativas existen para los lenguajes incrustables?

EDITAR:

Esto es aproximadamente un año después.

En realidad usamos Lua en nuestro sistema embebido y funciona maravillosamente bien. Con el tiempo, agregamos más y más soporte de scripting a más y más partes del proyecto y eso realmente ayudó a llevarlo adelante.

El rendimiento es excepcional, realmente. Incluso operaciones bastante complejas que implican la búsqueda a través de largo los arrays o las operaciones de string de lujo funcionan sorprendentemente bien. Básicamente nunca nos encontramos con problemas de rendimiento relacionados con Lua en absoluto.

La interfaz con las funciones de C es muy sencilla y funciona muy bien. Esto nos permitió hacer crecer el sistema de scripting sin dolor.

Finalmente, nos sorprendió lo flexible que Lua demostró ser. Nuestro intérprete Lua tiene que ejecutarse en un sistema con un asignador de memoria no estándar y sin soporte para el tipo de datos double. Hay dos lugares bien documentados en un archivo de encabezado que tuvimos que modificar para hacer que Lua funcionara en ese sistema. ¡Es muy adecuado para incrustar!

Author: bastibe, 2010-12-15

7 answers

Dado que dices "sistema embebido" y "pequeño y rápido" e "integrar bien", diría que tienes razón en que Lua es la opción número uno, si no la única. Pero ya no estoy de acuerdo en que el lenguaje de programación tiene "esquinas peculiares". En primer lugar, la programación de libros en Lua es simplemente espléndida, uno de los mejores libros que he leído. En segundo lugar, algunas de las "esquinas extravagantes" provienen del hecho de que el lenguaje es muy ortogonal y limpio, lo que a la larga es un activo, no un inconveniente. Me parece por ejemplo JavaScript mucho peor. Si lees "Javascript the good parts" el autor explica en detalle por qué algunas construcciones en el lenguaje son errores de diseño y por qué uno debe evitar el nuevo operador. No es así en Lua, las partes malas se han eliminado, por ejemplo, las cosas upvalue extravagantes se reemplazaron con el alcance sintáctico estándar en la versión 5.x.

Mi punto de vista es en realidad que Lua es un idioma con mucho menos esquinas peculiares que la mayoría de los otros idiomas! Lo usamos en un comercial proyecto y estamos más que contentos con él.

 38
Author: AndersH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-15 12:17:20

Siempre hay Lisp. :) Pero eso subraya el hecho de que Lua es de hecho menos "peculiar" que la mayoría de los idiomas. Fue diseñado para no programadores y se lee como pseudocódigo. Tiene una semántica limpia y uniforme (funciones anidadas de primera clase con alcance léxico; asignación múltiple; valores de retorno múltiples; un único mecanismo de estructuración de datos flexible con sintaxis de constructor limpia; etc.) que hacen que sea muy fácil de aprender, leer, escribir, etc. También resulta ser inesperadamente poderoso y expresivo (llamadas de cola adecuadas, continuaciones, metaprogramación, etc.)

El único aspecto realmente "peculiar" de Lua es que los arrays indexan desde 1, y ese hecho de que no toma prestadas las convenciones de C como todos los demás (~= en lugar de !=, -- en lugar de //, etc.), pero estos son en su mayoría extravagantes a través de los ojos de los programadores habituados a lenguajes similares a C.

Una alternativa podría ser Squirrel, que está inspirada en Lua, tiene objetivos similares, pero una sintaxis similar a C. No lo he usado aunque, por lo que no sé bien que cumple sus objetivos.

 12
Author: Mud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-15 22:34:26

Recomiendo de todo corazón Lua para su caso de uso. Sin embargo, Forth es una alternativa, especialmente para dispositivos embebidos con recursos limitados, que aún no se ha mencionado.

 11
Author: Judge Maygarden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-15 20:52:27

Con sus requisitos (tamaño pequeño, pequeñas peculiaridades e integración con C++), la única opción en la que puedo pensar es Common Lisp.

Algunas personas en esta otra pregunta SO están recomendando CFFI para integrarlo con C.

Pero me quedaría con Lua si estuviera contigo.
 4
Author: kikito,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:13

Tcl fue diseñado desde cero para ser un lenguaje embebido, y ha existido durante décadas. Además, es una opción perfecta para desarrollar un lenguaje específico de dominio debido a su naturaleza altamente extensible.

No se mucho sobre el mundo DSP, pero cuando buscas en Google "dsp lua" y "dsp tcl" obtienes el doble de hits para Tcl.

 3
Author: Bryan Oakley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-15 11:45:22

¿Has considerado Python ? Hay una buena guía de extensión e incrustación disponible. Si estás usando Boost, Boost Python es una biblioteca para la integración entre C++ y Python.

 1
Author: darioo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-15 10:24:08

Entiendo que Lua es la elección de la industria para problemas como este.

Una afirmación audaz! Yo sugeriría que si ya está ejecutando Linux, la elección está abierta de par en par. Linux en sí no es de ninguna manera la "elección de la industria" para los sistemas embebidos; la "industria" está mucho más fragmentada que eso.

Un lenguaje que es implementable en prácticamente cualquier sistema independientemente de su rendimiento, tamaño y sistema operativo (o incluso sin sistema operativo), es Forth. No es el idioma más de moda tal vez, pero fácilmente implementable y extensible.

Otro candidato podría ser ch, que es un intérprete de C/C++ incrustable, por lo que puede usar el mismo lenguaje para el código compilado y el script.

 0
Author: Clifford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-08 19:01:44