Компиляция Common Lisp в исполняемый файл

Недавно я начал изучать Common Lisp, используя SBCL. Как я могу скомпилировать свои программы на Лиспе в двоичный файл Windows?


person Shenal Silva    schedule 05.01.2013    source источник


Ответы (3)


Делаем hello.exe:

* (defun main () (print "hello"))

MAIN
* (sb-ext:save-lisp-and-die "hello.exe" :toplevel #'main :executable t)
[undoing binding stack and other enclosing state... done]
[saving current Lisp image into hello.exe:
writing 3160 bytes from the read-only space at 0x22000000
writing 2592 bytes from the static space at 0x22100000
writing 30134272 bytes from the dynamic space at 0x22300000
done]
> dir hello.exe
31,457,304 hello.exe
> hello.exe

"hello"

Исполняемый файл размером 31 МБ!

person KIM Taegyoon    schedule 29.10.2013
comment
Спасибо, это хороший пример того, о чем говорил Антон. Два вопроса: как бы вы создали исполняемый файл из существующего файла lisp и можно ли уменьшить размер исполняемого файла? - person James McMahon; 26.01.2014
comment
@JamesMcMahon: меньшие размеры возможны с некоторыми другими реализациями CL. Например, Clozure CL, CLISP, LispWorks, Allegro CL, MKCL. Очень маленькие программы можно создавать с помощью коммерческого компилятора mocl (хотя в настоящее время он не для Windows), который поддерживает только большое подмножество Common Lisp и не поддерживает загрузку кода во время выполнения, компиляцию во время выполнения, полную оценку во время выполнения и т. д. mocl вы получаете крошечные приложения, но они статичны — подобно тому, что вы ожидаете от компилятора C. Он фактически компилируется в код C. - person Rainer Joswig; 25.11.2014


Есть несколько инструментов для этого. Вы можете начать с Buildapp.

person Vsevolod Dyomkin    schedule 06.01.2013