2009-11-11 6 views
24

Oye, he estado buscando la posibilidad de agregar un lenguaje de scripting en mi framework y escuché acerca de Lisp y pensé que lo probaría. ¿Hay una máquina virtual para Lisp como Lua y Python o estoy en la mentalidad equivocada? Encontré CLISP aquí, http://clisp.cons.org/, pero no estoy seguro si esto es lo que estoy buscando.Lisp como lenguaje de secuencias de comandos en una aplicación de C++

¿Alguien puede indicarme la dirección correcta?

+0

CLISP es solo una implementación conforme a los estándares (ANSI, para ser específica) de LISP. –

+0

Ok, entonces eso no es lo que estoy buscando. Necesito saber si hay una implementación de Lisp para usar como lenguaje de scripting. – Orm

+0

Matt: No, de Common Lisp. – Svante

Respuesta

28

CLISP es solo una implementación de Common Lisp. Es una implementación muy buena, y tiene cierto soporte para ser incorporada en otros programas (basados ​​en C), pero ese no es su enfoque y es GPL, lo que puede o no ser un factor decisivo para usted.

Usted esta interesado en retirar ECL. Esta implementación está diseñada específicamente para ser incorporada (¡de hecho, la "E" significa "Embebedable"!) Y tiene numerosas características que pueden ser útiles para usted, incluida la capacidad de compilar programas Common Lisp para C (además de proporcionar byte) compilación de código y un intérprete).

+0

Como usted fue el primero en recomendarlo, marqué el suyo como la respuesta. Lo sentimos skypher = S – Orm

+0

Otra buena característica es la posibilidad de llamar a funciones C/C++ desde el REPL (excelente para probarlas) –

16

A menos que necesite la totalidad de Lisp, es posible que desee establecer una implementación de esquema como Guile que se debe incorporar a otro programa.

+0

Un trabajo previo mío tuvo muy buen éxito al implementar un lenguaje tipo esquema para scripts de tiempo de ejecución. (No podíamos usar Guile solo por razones de memoria y rendimiento, pero básicamente era un subconjunto de Scheme). – Crashworks

+0

Casi nunca necesitas el Common Lisp, esto es pura hipérbole. El esquema es * muy * barebones en comparación. – skypher

1

googlear un poco: Common Lisp as an Extension language

Pero hay que tener en cuenta que Common Lisp no fue diseñado desde cero para ser un lenguaje de extensión, a diferencia de Lua o Guile.

Un consejo general: trate de usar un lenguaje de extensión que realmente haga que el trabajo de escribirlos sea más fácil, y recuerde que dominar Lisp para que pueda ser realmente productivo puede llevar bastante tiempo (y no hay mucha gente alrededor puede soportar tantos parens xD).

+1

Guile es una implementación de Scheme, y Scheme tampoco se diseñó como un lenguaje de extensión. Si cuentas Guile debes contar ECL también. –

+1

Los lenguajes Lisp tienen el beneficio real de tener una sintaxis uniforme que los hace más fáciles de entender y usar que los lenguajes con sintaxis tradicional. No hay precedencia de operador o muchos personajes divertidos que deben tenerse en la cabeza. – skypher

+0

@Chris, OK, Scheme no fue diseñado como un lenguaje de extensión, pero es bastante pequeño, lo que lo hace muy adecuado para usarlo como un lenguaje incrustado. Por otro lado, Common Lisp es enorme. Eso no significa que no pueda integrarse, pero tiene poco sentido tener un lenguaje de "scripting" tan grande como CL. Sería algo así como usar Java como lenguaje de "scripting" ...por supuesto que ya se ha hecho antes (recuerdo el juego Vampire: Masquerade ahora), pero sigo pensando que ambos son lo suficientemente complejos y lo suficientemente grandes como para ser lenguajes de programación principales por sí solos, no como lenguajes de extensión. – fortran

5

Chicken Scheme es otra opción para la inserción. Consulte here para obtener detalles de la API incorporable.

-2

Lisp es una familia de idiomas.

Common Lisp es un estándar ANSI que es enorme. Piensa en C++ enorme. No lo use como un lenguaje de script.

A menos que esté apuntando a programadores bastante hardcore, Lisp como lenguaje de scripting va a ser ... er ... no está tomando bien. Probablemente. Es probable que Lua sea una mejor apuesta como lenguaje de script.

Dicho esto, un Lisp está bien (técnicamente) para implementar un lenguaje de scripting.

+1

Clisp no es un lenguaje, Clisp es una implementación de Common Lisp. Common Lisp es un lenguaje y tiene un estándar ANSI. Varias aplicaciones utilizan Common Lisp como lenguaje de scripting, especialmente aquellos que necesitan extensiones no triviales, como sistemas CAD complejos. –

+0

Clisp es una implementación específica de ANSI Common Lisp; hay un gran puñado de otras implicaciones del mismo lenguaje estándar. – Pillsy

+0

Fijo, fijo. yeesh. –

3

Hay un par de opciones fáciles.

GUILE es el lenguaje de extensión de GNU. Es un Esquema incrustable (dialecto de LISP). GPL (naturalmente).

TinyScheme es una implementación muy pequeña, muy simple basada en intérpretes de Scheme. Fue utilizado con éxito por una empresa de malware para hacer todo tipo de cosas desagradables. Está disponible en forma de fuente, no recuerdo bajo qué licencia (s).

8

Probar Embeddable Common Lisp (ECL).

http://ecls.sourceforge.net/

Está dirigido a la incrustación y se obtiene sólo las partes de Common Lisp vinculados que sus necesidades de lenguaje de scripting.

+0

La dirección actual (la que mencionas redirige allí por un tiempo) es https: //www.common- lisp.net/project/ecl –

6

Un Lisp es una buena opción para un lenguaje incrustado. Mucha gente cree que Lisp es difícil, pero la sintaxis es relativamente ligera, especialmente para los no programadores. En esencia, es la notación de prefijo y eso es todo. Las reglas de precedencia son siempre inequívocas. Los nombres de funciones y nombres de variables pueden ser iguales. Eres muy libre de usar los caracteres que quieras para los nombres de diversión y var.

Con Lisp puede doblar la sintaxis a su gusto; los usuarios no tienen que aprender el lisp común. Es fácil ampliar y proporcionar instalaciones más simples, como la expresión de reglas comerciales o la extracción de datos de archivos.

Supongo que mi punto es que el poder y la complejidad de decir Common Lisp, permite la provisión de constructos simples, específicos del dominio para el usuario final. Muchos otros lenguajes integrados significarán que los usuarios aprenderán las complejidades de ese idioma.

1

Dado que no es un Lisp, Fuzuli tiene una sintaxis similar a Lisp. Es fácil de integrar en aplicaciones C++. El sitio oficial es http://www.fuzuliproject.org

Otro es newLISP en http://www.newlisp.org/ y tampoco es un Lisp, pero está muy cerca de Lisp.

+1

Preguntó por Lisp, pero tal vez eso funcionaría mejor para él. ¿Hay alguna ventaja para aquellos que están por encima de algo como ECL o GUILE? –

+0

Como desarrollador principal de Fuzuli, no puedo ser bastante objetivo, pero puedo decir que es liviano y tiene una curva de aprendizaje más pronunciada, además, la velocidad puede satisfacer la necesidad de un lenguaje de scripting en una aplicación . Probar los ejemplos en línea en [link] (http://www.fuzuliproject.org/index.php?node=tryonline) puede dar una idea para la notación, el lenguaje y la velocidad. – jbytecode

+0

@jbytecode Miré a Fuzili y parece ser un proyecto desafiante. Pero realmente, GPL hoy en día es absolutamente inapropiado para la biblioteca (hablamos de incrustación). – Yury

Cuestiones relacionadas