tutor compiler compiladores common art build lisp common-lisp clisp

build - compiler - compiladores lisp



Ejecutable Lisp (6)

Eche un vistazo a la página principal clisp oficial. Hay una pregunta frecuente que responde a esta pregunta.

http://clisp.cons.org/impnotes/faq.html#faq-exec

Acabo de empezar a aprender Lisp y no puedo entender cómo compilar y vincular el código de lisp a un ejecutable.

Estoy usando clisp y clisp -c produce dos archivos:

  • .fas
  • .lib

¿Qué debo hacer para obtener un ejecutable?


Esta es una pregunta frecuente de Lisp (ligeramente adaptada):

*** ¿Cómo puedo hacer un ejecutable de mi programa?

Esto depende de su implementación; deberá consultar la documentación de su proveedor.

  • Con ECL y GCL, el proceso de compilación estándar producirá un ejecutable nativo.

  • Con LispWorks, consulte la sección de la Guía del usuario de entrega de la documentación.

  • Con Allegro Common Lisp, consulte la sección Entrega del manual.

  • etc ...

Sin embargo, la forma clásica de interactuar con los programas Common Lisp no implica ejecutables independientes. Consideremos esto durante dos fases del proceso de desarrollo: programación y entrega.

Fase de programación : el desarrollo de Common Lisp tiene más de una sensación incremental que es común en los lenguajes orientados a lotes, donde es común un ciclo edit-compile-link. Un desarrollador de CL ejecutará pruebas simples e interacciones transitorias con el entorno en REPL (o Read-Eval-Print-Loop, también conocido como el oyente ). El código fuente se guarda en los archivos, y las dependencias de compilación / carga entre los archivos fuente se graban en un recurso de descripción del sistema como ASDF (que desempeña un papel similar en los sistemas de edición-compilación-enlace). El recurso de descripción del sistema proporciona comandos para construir un sistema (y solo recompilar archivos cuyas dependencias han cambiado desde la última compilación) y para cargar un sistema en la memoria.

La mayoría de las implementaciones de Lisp comunes también proporcionan un mecanismo de "salvar mundo" que permite guardar una instantánea de la imagen actual de lisp, en una forma que luego puede reiniciarse. Un entorno de Common Lisp generalmente consiste en un tiempo de ejecución ejecutable relativamente pequeño y un archivo de imagen más grande que contiene el estado del mundo de lisp. Un uso común de esta instalación es volcar una imagen personalizada que contiene todas las herramientas de compilación y las bibliotecas que se utilizan en un proyecto determinado, con el fin de reducir el tiempo de inicio. Por ejemplo, esta instalación está disponible con el nombre EXT: SAVE-LISP en CMUCL, SB-EXT: SAVE-LISP-AND-DIE en SBCL, EXT: SAVEINITMEM en CLISP, y CCL: SAVE-APPLICATION en OpenMCL. La mayoría de estas implementaciones pueden anteponer el tiempo de ejecución a la imagen, haciéndola ejecutable.

Entrega de aplicaciones : en lugar de generar un solo archivo ejecutable para una aplicación, los desarrolladores de Lisp generalmente guardan una imagen que contiene su aplicación y la entregan a los clientes junto con el tiempo de ejecución y posiblemente un contenedor de shell-script que invoca el tiempo de ejecución con la imagen de la aplicación. En las plataformas de Windows, esto puede ocultarse al usuario mediante una herramienta de tipo InstallShield de click-o-matic.



Para una forma portátil de hacer esto, recomiendo roswell .

Para cualquier implementación compatible, puede crear scripts de lisp para ejecutar el programa que se puede ejecutar de manera portátil por ros que se puede usar en una línea de hash-bang de forma similar a un programa python o ruby.

Para SBCL y CCL roswell también puede crear ejecutables binarios con el ejecutable ros dump executable .


En realidad, estaba tratando de hacer esto hoy, y encontré que escribir esto en CLisp REPL funcionó:

(EXT:SAVEINITMEM "executable.exe" :QUIET t :INIT-FUNCTION ''main :EXECUTABLE t :NORC t)

donde main es el nombre de la función a la que desea llamar cuando se inicia el programa :QUIET t suprime el banner de inicio y :EXECUTABLE t un ejecutable nativo.

También puede ser útil llamar

(EXT:EXIT)

al final de su función principal para evitar que el usuario obtenga un aviso de ceceo interactivo cuando finalice el programa.

EDITAR: Al leer la documentación, también puede agregar :NORC t (leer enlace ). Esto suprime la carga del archivo RC (por ejemplo, ~/.clisprc.lisp ).


;; Sé que esta es una vieja pregunta, pero el código Lisp que estoy viendo tiene 25 años :-)

No pude conseguir la compilación trabajando con clisp en Windows 10. Sin embargo, funcionó para mí con gcl

https://www.cs.utexas.edu/users/novak/gclwin.html

;; mi archivo lisp es jugs2.lisp

gcl -compile jugs2.lisp ;; esto produce el archivo jars2.o si el archivo jugs2.lisp no tiene errores

;; ejecuta gcl sin parámetros para iniciar el intérprete lisp gcl

;; cargar el archivo .o

(carga "jars2.o")

;; crear un exe

(si: save-system "jugs2")

;; cuando se ejecuta el exe necesita el dll oncrpc.dll ;; esto está en la carpeta / lib / gcl-2.6.1 / unixport que crea gcl.bat.

;; cuando se ejecuta, muestra un entorno de lisp, llamada (principal) para ejecutar la función principal (principal)