scripting - script - ¿Alternativas a Lua como lenguaje incrustado?
programa lua download (7)
Estoy trabajando en un sistema integrado que ejecuta Linux en un DSP. Ahora queremos hacer que algunas partes se puedan escribir y buscamos un buen lenguaje de script incrustable. Estos scripts deberían integrarse muy 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 vayamos con Lua porque es probado y probado y es estable, y así sucesivamente. Sin embargo, como lenguaje de programación tiene algunas esquinas bastante peculiares.
Entonces, ¿qué alternativas hay para los lenguajes incrustables?
EDITAR:
Esto es aproximadamente un año después.
De hecho, utilizamos Lua en nuestro sistema integrado 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 a cabo.
El rendimiento es sobresaliente, realmente. Incluso operaciones bastante complejas que involucran la búsqueda a través de arreglos largos o operaciones de cuerdas de fantasía funcionan sorprendentemente bien. Básicamente, nunca nos encontramos con problemas de rendimiento relacionados con Lua.
La interfaz con las funciones C es muy sencilla y funciona muy bien. Esto nos permitió hacer crecer el sistema de scripts sin dolor.
Finalmente, nos sorprendió lo flexible que resultó ser Lua. 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 doble. Hay dos lugares bien documentados en un archivo de encabezado que tuvimos que modificar para hacer que Lua trabaje en ese sistema. ¡Es muy adecuado para incrustar!
¿Has considerado Python ? Hay una buena guía extensible e incrustante disponible. Si está utilizando Boost , Boost Python es una biblioteca para una integración sin problemas entre C ++ y Python.
Como dices "sistema integrado" y "pequeño y rápido" e "integrarse bien", diría que tienes razón en que Lua es la primera opción, si no la única. Pero ya no estoy de acuerdo con que el lenguaje de programación tenga "esquinas estrafalarias". En primer lugar, el libro Programación en Lua es simplemente espléndido, uno de los mejores libros que he leído. En segundo lugar, algunas de las "esquinas estrafalarias" provienen del hecho de que el lenguaje es muy ortogonal y limpio, lo que a la larga es una ventaja, no un inconveniente. Encuentro, por ejemplo, JavaScript mucho peor. Si lees "Javascript las partes buenas", el autor explica extensamente por qué algunos constructos 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, el material extravagante se reemplazó con el ámbito sintáctico estándar en la versión 5.x.
Mi punto de vista es que Lua es un lenguaje con esquinas menos peculiares que la mayoría de los otros idiomas. Lo usamos en un proyecto comercial y estamos más que felices con él.
Recomiendo sinceramente a Lua para su caso de uso. Sin embargo, Forth es una alternativa, especialmente para dispositivos integrados con recursos limitados, que aún no se ha mencionado.
Siempre hay Lisp. :) Pero eso subraya el hecho de que Lua es, de hecho, menos "estrafalario" 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, múltiples valores de retorno, un único mecanismo flexible de estructuración de datos con sintaxis limpia del constructor, etc.) que hacen que sea muy fácil de aprender, leer, escribir, etc. También resulta inesperadamente poderoso y expresivo (llamadas de cola adecuadas, continuaciones, metaprogramación, etc.)
El único aspecto realmente "estrafalario" de Lua es el índice de matrices desde 1, y el hecho de que no toma prestados las convenciones de C como todos los demás ( ~=
lugar de !=
, --
lugar de //
, etc.), pero estos son en su mayoría extravagantes a través de los ojos de los programadores acostumbrados a los lenguajes tipo C.
Una alternativa podría ser Squirrel, que está inspirada en Lua, tiene objetivos similares, pero sintaxis similar a C. No lo he usado, así que no sé si cumple sus objetivos.
Tcl fue diseñado desde cero para ser un lenguaje incrustado, 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 sé mucho sobre el mundo de DSP, pero cuando googleas "dsp lua" y "dsp tcl" recibes el doble de hits para Tcl.
Entiendo que Lua es la opción de la industria para problemas como este.
¡Un reclamo audaz! Sugeriría que si ya está ejecutando Linux, la opción está abierta. Linux en sí mismo no es de ninguna manera la "opción de la industria" para los sistemas integrados; la ''industria'' está mucho más fragmentada que eso.
Un lenguaje que se puede implementar en prácticamente cualquier sistema, independientemente del rendimiento, el tamaño y el sistema operativo (o incluso ningún sistema operativo), es Forth. No es el lenguaje más de moda, pero es fácilmente implementable y extensible.
Otro candidato podría ser ch , que es un intérprete C / C ++ embebible, por lo que puede usar el mismo lenguaje para código compilado y con guiones.
Con sus requisitos (tamaño pequeño, pequeños caprichos 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 donde tú.