lua common-lisp embedded-language

Lenguaje incrustado: Lua vs Common Lisp(ECL)



common-lisp embedded-language (1)

¿Alguien aquí tiene una experiencia con Common Lisp como lenguaje incrustado (usando ECL)? Si es así, ¿qué tan bueno es ECL en comparación con Lua?


No he incluido CL anteriormente, pero lo he hecho tanto con Lua como con dos implementaciones de Scheme particulares (Gambit-C y GNU Guile).

Scheme crea un lenguaje embebido genial en mi opinión, porque es flexible y no está demasiado hinchado. Gambit-C es particularmente sorprendente para esto porque le permite ejecutar scripts interpretados, y también compilar su código hasta C. En mis pruebas, el código C generado por Gambit-C fue solo un poco más lento que el C escrito a mano (por ejemplo, un una prueba particular que corrió 0.030s en C fue 0.040 en Gambit!). Gambit también tiene una muy buena FFI (interfaz de función externa), que es esencialmente Scheme con sintaxis especial para escribir enlaces a bibliotecas C (ObjC y C ++ también son compatibles directamente). Gambit también tiene una respuesta muy agradable con algunas capacidades de depuración.

Guile también es bastante agradable, y realmente funciona más rápido que Lua (el lenguaje más rápido interpretado que conozco en la actualidad - Guile ha progresado mucho en los últimos años). Pero dado que Gambit-C puede compilar código realmente rápido, generalmente no uso tanto Guile a menos que tenga la intención de usar código interpretado en la versión final.

Lua tiene cierres, pero no obtendrá continuaciones como en Scheme, y tampoco obtendrá las macros. Sin embargo, todavía es posible hacer una cantidad razonable de cosas funcionales. No tendrá un sistema de objetos con todas las funciones (como CLOS en CL), pero sí tiene tablas y se pueden usar para implementar tanto la herencia basada en clases como la herencia basada en prototipos con bastante facilidad. Además, Lua tiene una excelente C API que es realmente un placer trabajar con ella. Está basado en la pila y está diseñado de forma que no tenga que preocuparse por el lado Lua de la gestión de memoria. La API es muy clara y está bien organizada, y hay una gran cantidad de documentación y código de ejemplo. Lua no puede compilar hacia abajo, pero sí utiliza byte-code (siempre: cuando envía código a Lua VM, siempre compila ese código primero en el byte-code y luego lo ejecuta).

Ahora, en cuanto a Common Lisp, creo que probablemente no sea un buen lenguaje para incrustar. La razón de esto es que CL es enorme. En general, es deseable incrustar un lenguaje liviano porque usará la plataforma / libs que le proporcione, y no tanto material externo.

Entonces, creo que no puedes equivocarte con Gambit-C, Guile o Lua. Todos serán realmente agradables. CL es poderoso, pero creo que es demasiado grande para incrustarlo.