Запуск скомпилированной программы на Лиспе

Я предполагаю, что это не ракетостроение, но как мне запустить скомпилированный файл LISP? Я использую Emacs и SLIME под Windows. Из меню SLIME легко скомпилировать файл, и, как только он это сделает, он выплевывает wx64fsl в тот же каталог, что и мой источник lisp. Как мне загрузить / запустить этот файл? Я запускал файлы, оценивая целые блоки кода, и мне сказали, что запуск скомпилированной версии работает намного лучше.

3 ответа

Решение

Из репортажа SLIME:

  1. ,cd поменять каталоги на тот, в котором есть файл lisp
  2. (load (compile "filename.lisp"))

ИЛИ из меню SLIME:

SLIME> Компиляция> Компиляция \ Загрузка

Так что в основном это было смущающе легко, и была даже опция меню, я был просто смущен номенклатурой. Надеюсь, это поможет кому-то в будущем.

(LOAD "whatever") будет обычно загружать и компилировать what.lisp, если скомпилированный файл уже присутствует с таким же именем и специфичным для реализации расширением. Эти файлы создаются с (COMPILE-FILE "whatever.lisp") или в Emacs с SLIME, используя ключи C-c C-k,

Как рекомендует Rainer, вам, вероятно, следует использовать ASDF для определения вашей системы и, скорее всего, quicklisp для управления зависимостями и установки пакетов. Также есть быстрый проект, который я рекомендую для создания шаблона проекта. Вы можете легко установить его с помощью quicklisp.

Ваша реализация lisp автоматически компилирует функции? SBCL на OS X делает для меня. Если это так, я не думаю, что вы получите какую-либо выгоду от использования скомпилированных файлов, кроме экономии времени компиляции при загрузке файла.

Пример взят из CLHS и проверен на моей установке в REPL:

(defun f (x) x)
F
> 
(compiled-function-p #'f)
T
> 

На практике я всегда использовал только файлы.lisp. Никогда не тратить время на использование Make в качестве инструмента сборки для автоматической компиляции исходного кода lisp по мере его изменения. Я не видел каких-либо реальных преимуществ от использования скомпилированных файловых форм, по крайней мере, на моей установке, кроме экономии времени компиляции (не ускоряя время выполнения).

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

Другие вопросы по тегам