Создание исполняемых файлов
(перевод статьи Creating Executables взятой с http://www.cliki.net)
Новички в Lisp часто спрашивают: как создать исполняемый файл(executable) из Lisp программы.
cl-launch - это утилита, позволяющая легко запускать Lisp программы из командной оболочки UNIX. Смотрите также ShellScripting. Buildapp - это подобная cl-launch утилита, но специфичная для SBCL.
Создание самодостаточных приложений(stand-alone executables) не является основной задачей Lisp'а, в отличие от С-подобных языков. Lisp разработка гораздо более интерактивна. Функции и определения классов, обычно, компилируются и встраиваются в Lisp окружение в тот же момент, когда их описание написано. Из REPL'а можно сразу же изменить переменные Lisp окружения или вызвать из него функции. "Программы" в Lisp запускаются, как и все остальное, посредством вызова функции.
Когда система готова к выпуску, классический подход - загрузить все скомпилированные описания в Lisp окружение и создать его "дамп" в виде образа на диске, тогда вызвать "запускающую функцию" означает запустить приложение.
Формат такого образа зависит от реализации Lisp'а. Это, однако, мало отличается от С-приложений, требующих специфичных для платформы динамических библиотек.
Метод создания такого образа зависит от реализации:
- Сохранение образов для CLISP
- Сохранение образов ядра для SBCL
- Сохранение приложений для OpenMCL/Clozure Common Lisp
Альтернативный вариант - создание образа, включающего не только систему, но и реализацию Lisp. Подобный образ, как правило, больше чем бинарные файлы C-программ, т.к. реализация Lisp'а, как правило, содержит отладчик, компилятор и полный набор необходимых библиотек.
Lispbuilder wiki - здесь можно найти учебник по этой теме.
- Развертывание(delivery) приложений для CLISP
- Учебные примеры по использованию CLISP с Lispbuilder-SDL под Windows
- Советы для CMUCL содержат информацию о создании консольных UNIX скриптов для выполнения CMUCL приложений
- Application Delivery for Allegro Common Lisp
- Развертывание приложений для Xanalys Lispworks
- Сборка самодостаточных приложений для ECL (при поддержке множества способов развертывания приложений).
"Tree-shaking"("утряска дерева", отделение программы от lisp-системы), может уменьшить размер исполняемого модуля, но сильно снижает гибкость. Компилятор и отладчик удобны для интерактивной и удаленной модификации системы, запущенной на клиентской машине. Также, компилятор используется в некоторых реализациях в неожиданных местах, например, в реализации CLOS. Т.о. использование tree-shaking как правило не практично.