Исполняемый Лисп - PullRequest
       28

Исполняемый Лисп

59 голосов
/ 24 августа 2008

Я только начал изучать Lisp и не могу понять, как скомпилировать и связать код lisp с исполняемым файлом.

Я использую clisp и clisp -c создает два файла:

  • .fas
  • .lib

Что мне делать дальше, чтобы получить исполняемый файл?

Ответы [ 6 ]

48 голосов
/ 25 августа 2008

Я действительно пытался сделать это сегодня, и я обнаружил, что ввод этого в CLisp REPL сработал:

(EXT:SAVEINITMEM "executable.exe"
                 :QUIET t
                 :INIT-FUNCTION 'main
                 :EXECUTABLE t
                 :NORC t)

где main - имя функции, которую вы хотите вызвать при запуске программы, :QUIET t подавляет баннер запуска, а :EXECUTABLE t делает собственный исполняемый файл.

Также может быть полезно позвонить

(EXT:EXIT)

в конце вашей основной функции, чтобы не дать пользователю получить интерактивное приглашение lisp после завершения программы.

РЕДАКТИРОВАТЬ: читая документацию, вы также можете добавить :NORC t (читать ссылка ). Это подавляет загрузку файла RC (например, ~/.clisprc.lisp).

35 голосов
/ 28 августа 2008

Это FAQ по Lisp (слегка адаптировано):

*** Как сделать исполняемый файл из моей программы?

Это зависит от вашей реализации; вам нужно будет проконсультироваться с вашим документация поставщика.

  • При использовании ECL и GCL стандартный процесс компиляции будет создать собственный исполняемый файл.

  • В LispWorks см. Руководство пользователя по доставке раздела документация.

  • В Allegro Common Lisp см. Раздел Доставка руководство.

  • и т.д ...

Тем не менее, классический способ взаимодействия с программами Common Lisp не включает автономные исполняемые файлы. Давайте рассмотрим это во время две фазы процесса разработки: программирование и поставка.

Фаза программирования : Разработка Common Lisp имеет больше инкрементное ощущение, чем обычно в пакетно-ориентированных языках, где цикл edit-compile-link является обычным явлением. Разработчик CL будет работать просто испытания и переходные взаимодействия с окружающей средой на REPL (или Read-Eval-Print-Loop, также известный как слушатель ). Исходный код сохраняется в файлах, а сборка / загрузка зависимости между исходными файлами записываются в системном описании объект, такой как ASDF (который играет роль, аналогичную make в системы редактирования-компиляции-ссылки). Средство описания системы обеспечивает команды для построения системы (и только перекомпиляция файлов, чьи зависимости были изменены с момента последней сборки), и для загрузки система в память.

Большинство реализаций Lisp также предоставляют механизм "сохранения мира" это позволяет сохранить снимок текущего изображения lisp, в форме, которая может быть позже перезапущена. Среда Common Lisp обычно состоит из относительно небольшой исполняемой среды выполнения и больший файл изображения, который содержит состояние мира LISP. Обычный использование этого средства - сбросить настроенное изображение, содержащее все создавать инструменты и библиотеки, которые используются в данном проекте, в порядке сократить время запуска. Например, это средство доступно под имя EXT: SAVE-LISP в CMUCL, SB-EXT: SAVE-LISP-AND-DIE в SBCL, EXT: SAVEINITMEM в CLISP и CCL: SAVE-APPLICATION в OpenMCL. Большинство из этих реализаций могут добавлять время выполнения к образ, тем самым делая его исполняемым.

Доставка приложений : вместо создания одного исполняемого файла файл для приложения, разработчики Lisp обычно сохраняют изображение содержащий их приложение, и доставить его клиентам вместе с время выполнения и, возможно, оболочка сценария оболочки, которая вызывает время выполнения с изображением приложения. На платформах Windows это может быть скрыты от пользователя с помощью инструмента типа InstallShield, использующего щелчок мышью.

14 голосов
/ 25 июня 2009

У CLiki также есть хороший ответ: Создание исполняемых файлов

14 голосов
/ 24 августа 2008

Взгляните на официальную домашнюю страницу clisp. Существует ответ на этот вопрос.

http://clisp.cons.org/impnotes/faq.html#faq-exec

2 голосов
/ 10 декабря 2015

Для портативного способа я рекомендую Розуэлл .

Для любой поддерживаемой реализации вы можете создать сценарии lisp для запуска программы, которую можно запускать переносимым способом ros, который можно использовать в строке хеш-бенга аналогично программе Python или ruby.

Для SBCL и CCL Розуэлл также может создавать двоичные исполняемые файлы с ros dump executable.

0 голосов
/ 26 августа 2017

Я знаю, что это старый вопрос, но код Лисп, на который я смотрю, 25 лет: -)

Не удалось получить компиляцию, работающую с clisp в Windows 10. Тем не менее, он работал для меня с gcl .

Если мой файл lisp - jugs2.lisp,

gcl -compile jugs2.lisp

Создает файл jugs2.o, если в файле jugs2.lisp нет ошибок.

Запустите gcl без параметров, чтобы запустить интерпретатор lisp:

gcl

Загрузить .o файл:

(load "jugs2.o")

Чтобы создать EXE:

(si:save-system "jugs2")

Когда исполняется EXE, ему нужна DLL oncrpc.dll; это в папке <gcl install folder>\lib\gcl-2.6.1\unixport, которую создает gcl.bat.

При запуске он показывает среду lisp, вызывая (main) для запуска основной функции (Основной). * 1 025 *

...