Ejecutable Lisp

Acabo de empezar a aprender Lisp y no puedo entender cómo comstackr 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?

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 progtwig :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 progtwig.

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 ).

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

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

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

  • Con ECL y GCL, el proceso de comstackció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 progtwigs Common Lisp no implica ejecutables independientes. Consideremos esto durante dos fases del proceso de desarrollo: progtwigción y entrega.

Fase de progtwigció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 comstackció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-comstackción-enlace). El recurso de descripción del sistema proporciona comandos para construir un sistema (y solo recomstackr archivos cuyas dependencias han cambiado desde la última comstackció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 comstackció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.

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

CLiki también tiene una buena respuesta: crear ejecutables

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

Para cualquier implementación compatible, puede crear scripts de lisp para ejecutar el progtwig 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 progtwig python o ruby.

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

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

No pude conseguir la comstackció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)

    Intereting Posts