Компилятор файлов в системах Common Lisp создает представление исходного источника на каком-то машинном языке (в зависимости от целевого процессора) или для некоторой виртуальной машины (например, в CLISP). Этот скомпилированный файл затем может быть загружен в работающую систему Lisp с помощью функции LOAD и создает определения источника (функции, классы, переменные, ...) и выполняет другой код в файле.
Можно загружать исходные файлы напрямую (также с помощью функции LOAD). Если Lisp использует компилятор даже для загрузки форм, преимущество файлового компилятора:
- загрузка скомпилированного кода должна быть немного быстрее
- некоторая проверка ошибок во время компиляции
- возможно более агрессивная компиляция с более быстрым кодом во время выполнения
- код может быть меньше (зависит)
Сохранение изображения является независимым. Образ представляет собой дамп памяти работающего Lisp. Но обычно не каждое состояние может быть сброшено в зависимости от системы Lisp. Кандидаты вещей, которые не могут быть выгружены в образ: соединения с файлами, сетевые соединения, открытые окна, ... Итак, эти вещи, возможно, придется открыть заново при запуске образа.
Если вы хотите запустить приложение на Лиспе, у вас есть несколько вариантов:
- загрузить весь исходный код при запуске
- загрузить весь скомпилированный код при запуске
- загрузить изображение с включенным кодом
Последний, вероятно, самый быстрый. Для многих целей загрузка скомпилированного кода при запуске также выполняется достаточно быстро, особенно если запуск происходит только время от времени.
Давайте снова посмотрим на ваш вопрос.
(compile-file "foo.lisp")
Выше просто компилируется один файл в скомпилированный файл (файл FASL, «быстрая загрузка»). Результатом компиляции также является то, что некоторая информация была записана в системе Lisp, но определения файла недоступны. Затем вам нужно загрузить скомпилированный файл.
(progn (load "foo.lisp") (save-application "foo"))
Выше сначала загружается файл. Обратите внимание, что Lisp с инкрементным компилятором может компилировать некоторые или все операторы в этом файле (CCL и SBCL делают это). SAVE-APPLICATION - это специфическая функция CCL, которая выводит полное состояние Lisp (за исключением соединений с файлами, ...) и создает приложение, которое затем может быть запущено.
Если вы хотите создавать приложения на Лиспе, которые запускаются как другие приложения, SAVE-APPLICATION - это то, что вам нужно.
Если можно загрузить несколько изображений, это зависит от системы. В CCL вы не можете. На Лисп-машине можно загрузить базовое изображение, а затем несколько инкрементальных изображений поверх этого.