2009-04-05 15 views
14

Me gustaría desarrollar una aplicación gráfica en Common Lisp u otro dialecto Lisp que se pueda implementar en Mac, Windows y Linux como una forma de mejorar mi conocimiento de este idioma. Lo ideal sería:¿Es posible implementar una aplicación de escritorio Common Lisp (u otro dialecto) para varias plataformas?

  1. sería compilar el código
  2. utilizaría una biblioteca gráfica común
  3. no sería necesario la instalación del entorno de ejecución.

Me gustaría hacer una pequeña aplicación gráfica o de juegos, y poder mostrarla con una simple instalación en una computadora con cualquiera de estos sistemas operativos.

Alguien tiene experiencia con situaciones similares o me podría apuntar a mejores opciones de bibliotecas gráficas y compiladores, entornos de ejecución, etc ...

Gracias!

+0

Al "compilar el código", ¿quiere decir generar código de máquina o es correcto el byte de VM? –

+0

Además, ¿qué sucede si el bytecode está compilado JIT en código máquina por la máquina virtual? –

+0

Sí, ¡todo está bien! Estoy muy interesado en las características del lenguaje. – alvatar

Respuesta

19

Soy uno de los desarrolladores de lispbuilder-sdl que actualmente está alojado en el código de google.

alt text http://img10.imageshack.us/img10/7664/mandelbrot.jpg

http://code.google.com/p/lispbuilder/

Esto le da una forma de ejecución de programas de Common Lisp en Linux, Windows y Mac máquinas sin modificaciones. Utilizamos la biblioteca SDL y varias extensiones de la misma.

Un programa mínimo se parece a esto:

(sdl:with-init() 
    (sdl:window 320 240) 
    (sdl:draw-surface (load-image "lisp.bmp")) 
    (sdl:with-events() 
     (:quit-event() t) 
     (:video-expose-event (sdl:update-display)))) 

El wiki también explica cómo construir autónomo exe para varias de las implementaciones de Common Lisp.

+0

Guau, muy agradable. Eso bien podría ser lo que me haga darle otro intento a LISP. – jfclavette

9

La mayoría de las implementaciones de Lisp comunes pueden volcar imágenes ejecutables. Algunas veces estos son dos archivos (kernel + image), pero a menudo esto puede ser solo un ejecutable. Pero el ejecutable usualmente se ejecuta solo en la plataforma para la que fue compilado. Las implementaciones comerciales como LispWorks o Allegro CL tienen capacidades extendidas, por ejemplo, se pueden eliminar partes no utilizadas del sistema Lisp. Esto se llama 'entrega'.

Hay información sobre LispWorks applications. LispWorks es comercial y las plataformas de cobertura pueden ser costosas. Tendría que comprar el entorno de desarrollo: la entrega es gratuita en plataformas populares. LispWorks tiene una biblioteca gráfica para Windows, Mac y Unix/Linux. Este último se basa en el adorno oldish. La ventaja es que el código puede ser muy portátil en las plataformas. El entorno de desarrollo LispWorks en sí es una aplicación LispWorks. En la Mac, por ejemplo, la versión de 32 bits y la de 64 bits se ejecuta en PowerPC y x86 desde una única aplicación.

Se recopila información sobre las versiones 'gratuitas' de Common Lisp y bibliotecas en CLIKI. Escribir aplicaciones de MS Windows no es la parte más fuerte de Common Lisp 'gratis'.

6

PLT Scheme puede hacer todo lo que pida. La biblioteca que usa de fábrica es WxWindows, pero puede obtener enlaces para otros sistemas GUI si realmente lo desea.

PLT Scheme es probablemente el Lisp con más trabajo hecho para facilitar la escritura y distribución de "un pequeño juego o aplicación gráfica". Incluyen muchos examples of games en la distribución base y su buque insignia IDE DrScheme está escrito en su propio graphics framework. Es libre de crear y distribuir código compilado PLT Scheme en cualquier plataforma.

Editar: Ha solicitado cualquier dialecto de Lisp. ¿Clojure también sería una opción?

Edición 2:

Se dice que Clojure es una opción. Si ya está familiarizado con Java y Swing, creo que Clojure sería un buen camino a seguir, con la advertencia de que tiene algunas diferencias sintácticas bastante grandes con otros Lisps. A book is forthcoming.

Si aún no eres un experto en Java, creo que PLT Scheme seguirá siendo la mejor opción. Me acerco a esto desde los ángulos "recién empezando a aprender Lisp" y "pequeña aplicación de demostración".Otras personas han notado que las implementaciones comerciales de Common Lisp respaldan lo que usted desea, pero serán más difíciles (y más costosas) de usar como sistemas introductorios.

Todas estas implementaciones tienen macro sistemas, lo que creo que es lo que quiere decir con "el código es de primera clase".

+2

Bien, downvoted porque no es Common Lisp, supongo. La pregunta pregunta por cualquier dialecto. –

+0

whups, mi lectura equivocada. PLT es un buen sistema. Sin embargo, algunos cefaleas comunes están mucho más allá en términos de entregar software comercial, etc. CL es un entorno de programación industrial bien pensado, después de todo. Así que supongo que depende de lo que OP necesita. – simon

+0

Sí, Clojure y PLT Scheme también son opciones. No sé mucho sobre las diferencias, pero una característica importante para mí es que el código es de primera clase, como en Lisp. – alvatar

4

Rainer tiene un buen comentario sobre los problemas fundamentales: existen buenas soluciones comerciales que hacen exactamente lo que usted solicita (pero no son entornos de desarrollo gratuitos y pueden implicar tarifas recurrentes), con bibliotecas compatibles multiplataforma. También hay enfoques de software libre, pero es más difícil de implementar en las tres plataformas como lo requiera (no es imposible, pero sí se trata de algo más).

Agregaré que "no instalar el entorno de tiempo de ejecución" es un poco problemático. No es necesario que el usuario final instale por separado un ceceo, pero es posible que su programa necesite instalar todo el tiempo de ejecución para funcionar, dependiendo de lo que haga. La flexibilidad en este nivel significa que puede ser difícil determinar programáticamente qué bits son y cuáles no, por lo que las soluciones de software libre generalmente no se preocupan por el trabajo un tanto tedioso y complicado de escribir un agitador de árboles para hacer esto.

+0

Ofrecer el medio ambiente con mi aplicación está bien, simplemente no me gustaría obligar al usuario a realizar una instalación completa por su cuenta – alvatar

1

Hay ECL, una implementación de Common Lisp que parece hacer lo que usted desea (aunque todavía no lo he usado).

3

Lo que estoy haciendo actualmente, en una aplicación gráfica que utiliza OpenGL y GLFW, está desarrollando principalmente con SBCL, y dando mis entregas a través de probadores cl-launch. Sin embargo, mi plan es usar CCL para compilar un paquete de aplicaciones en OS X y ECL para construir un ejecutable independiente en Linux y Windows. Los paquetes que estoy construyendo en este momento con cl-launch son bastante grandes (típicamente 30M y más), mientras que las pruebas que he hecho con ECL han sido mucho más pequeñas (libecl pesa alrededor de 1.3M en mi sistema). Sin embargo, esperaría que SBCL funcionara mejor (¡aunque haría un perfil para asegurarme, primero!), Por lo que su elección dependerá de su aplicación.

Sin embargo, si estuviera haciendo esto comercialmente, invertiría en una de las implementaciones comerciales. Rainer Joswig menciona LispWorks y Allegro arriba. Para la entrega de aplicaciones de Windows, también puede considerar Corman Lisp. Mi impresión es que la ruta más rápida pero más cara para hacer entrega de aplicaciones en esos tres sistemas operativos es comprar Allegro, pero una alternativa (más trabajo, pero más barata) sería usar CCL en OS X, Corman en Win32 y ECL o SBCL en Linux. LispWorks parece ser una opción intermedia, aunque mucha gente lo confía, así que no lo descartaría como inferior a Allegro solo porque es más asequible.

El problema de la biblioteca de gráficos es algo separado; mi impresión es que la situación mejora constantemente (los callbacks en CFFI parecen funcionar en la mayoría de las plataformas ahora, lo que es una gran ayuda para interactuar con la mayoría de los toolkits de C), pero he estado trabajando más con GL, GLFW, GLUT y SDL (aunque todavía no con lispbuilder, mencionado por justinhj arriba, que se ve bien). Experimenté un poco con wxCL hace uno o dos años, y parecía prometedor.

Lo bueno de CL es que, con tantas buenas implementaciones, puede desarrollar en su implementación de elección, y la mayoría de su código debe ser fácilmente portado a la implementación que elija para la entrega de aplicaciones en una plataforma determinada.

1

Ecl lisp puede compilar un ejecutable muy pequeño (unos kbs) pero en Ubuntu para ejecutar este archivo ejecutable debe haber un archivo libecl.so.11.1 en su directorio/usr/local/lib. Este archivo es de 5.7 mb.

Cuestiones relacionadas