Como salvar corretamente a imagem Common Lisp usando SBCL?
Se eu quiser criar uma imagem Lisp do meu programa, como faço isso corretamente? Existem pré-requisitos? E não funciona muito bem com o QUICKLISP?
No momento, se eu iniciar o SBCL (com apenas o QUICKLISP pré-carregado) e salvar a imagem:
(save-lisp-and-die "core")
E tente iniciar o SBCL novamente com esta imagem
sbcl --core core
E então tente fazer:
(ql:quickload :cl-yaclyaml)
Eu recebo o seguinte:
To load "cl-yaclyaml":
Load 1 ASDF system:
cl-yaclyaml
; Loading "cl-yaclyaml"
.......
debugger invoked on a SB-INT:EXTENSION-FAILURE in thread
#<THREAD "main thread" RUNNING {100322C613}>:
Don't know how to REQUIRE sb-sprof.
See also:
The SBCL Manual, Variable *MODULE-PROVIDER-FUNCTIONS*
The SBCL Manual, Function REQUIRE
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [RETRY ] Retry completing load for #<REQUIRE-SYSTEM "sb-sprof">.
1: [ACCEPT ] Continue, treating completing load for #<REQUIRE-SYSTEM "sb-sprof"> as having been successful.
2: Retry ASDF operation.
3: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration.
4: [ABORT ] Give up on "cl-yaclyaml"
5: Exit debugger, returning to top level.
(SB-IMPL::REQUIRE-ERROR "Don't know how to ~S ~A." REQUIRE "sb-sprof")
0]
Como alternativa, se eu tentar:
(require 'sb-sprof)
Quando o sbcl é iniciado com o núcleo salvo, eu recebo o mesmo erro. Se o sbcl for iniciado da mesma maneirasbcl
não há nenhum erro relatado.
De fato, pré-carregar o QUICKLISP não é um problema: o mesmo problema ocorre se o sbcl for chamado inicialmente comsbcl --no-userinit --no-sysinit
.
Estou fazendo errado?
PS. Se eu usar Roswell,ros -L sbcl-bin -m core run
de alguma forma, não capta a imagem (testada declarando variável*A*
antes de salvar e não vê-lo depois de reiniciado).
PS2. Até agora, o que parece é que o sbcl não fornece módulos de extensão (SB-SPROF
, SB-POSIX
, etc.), a menos que sejam explicitamente necessários antes de salvar a imagem.