Запуск скомпилированной программы на Лиспе
Я предполагаю, что это не ракетостроение, но как мне запустить скомпилированный файл LISP? Я использую Emacs и SLIME под Windows. Из меню SLIME легко скомпилировать файл, и, как только он это сделает, он выплевывает wx64fsl в тот же каталог, что и мой источник lisp. Как мне загрузить / запустить этот файл? Я запускал файлы, оценивая целые блоки кода, и мне сказали, что запуск скомпилированной версии работает намного лучше.
3 ответа
Из репортажа SLIME:
,cd
поменять каталоги на тот, в котором есть файл lisp(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.