Actualmente tengo un pequeño programa en Common Lisp, que quiero ejecutar como un script de shell. Estoy utilizando el SBCL y perfectamente bien con esto, así que preferiría permanecer en esta plataforma. :)¿Cómo se usa quicklisp cuando se invoca el programa CL como un script de shell?
Conozco la opción --script
y funciona a la perfección excepto en el formulario (ql:quickload)
.
Mi programa utiliza el CL-FAD, que carga a través ql:quickload
(creo que debería mencionar que es la función de carga del paquete de quicklisp). Cuando la escritura se prepara para la evaluación de la forma
(ql:quickload :cl-fad)
, se rompe con el siguiente error:
package "QL" not found
Programa se empaqueta en el archivo de fuente única, que ha encabezado siguiente:
(defpackage :my-package
(:use :common-lisp)
(:export :my-main-method))
Es un ejecutable de automatización simple, así que decidí (quizás erróneamente) no escribir ningún sistema ASDF. Exporta una sola función que debe ejecutarse sin ningún argumento.
Para este programa Actualmente estoy tratando de escribir el guión lanzador, y esto es lo que estoy mirando a:
#!/usr/bin/sbcl --script
(load "my-program.lisp")
(in-package :my-package)
(my-main-method)
Estas tres líneas (sin contar el tinglado) es lo que estoy desee automatizar. Mientras leo en la documentación, el script con este shebang puede llamarse simple ./script.lisp
, y realmente lo hace ... con el error descrito anteriormente.
¿Qué necesito agregar en el iniciador para :cl-fad
para cargar correctamente? Documentación indica que con --script
opción SBCL no se carga ningún archivo de inicio, por lo que realmente necesito CopyPaste las líneas
#-quicklisp
(let ((quicklisp-init (merge-pathnames "systems/quicklisp/setup.lisp"
(user-homedir-pathname))))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
(lo que se suma a ql:add-to-init-file
.sbclrc), a mi script lanzador? ¿Tal vez tengo algún defecto arquitectónico profundo en la configuración de mi programa?
Y sí, cuando ingreso las líneas que trato de automatizar en REPL en el propio sbcl, el programa se ejecuta como se esperaba.
Tengo quicklisp en el directorio diferente y no quiero que _yet_ piratee los scripts de otros. :) Coredumping por el primer método funcionó muy bien, tengo muchos lanzadores en mi '~/bin' ya. Y la imagen objeto de dumping también funciona increíblemente rápido. %) – hijarian
¡Sí! ¡Trabajar con imágenes es genial! Es por eso que los Smalltalkers comienzan su trabajo diario con una sonrisa y los desarrolladores de Java Eclipse comienzan su propio negocio con café. –