Обработка изображений в Clozure Cl
Вопрос
1) Каков правильный метод создания изображения в CCL? Или в чем точная разница между:
(compile-file "foo.lisp")
а также (progn (load "foo.lisp") (save-application "foo"))
?
2) Есть ли возможность загружать несколько изображений (предпочтительная командная строка)?
Решение
Компилятор файла в общих системах LISP создает представление исходного источника на каком -то виде машинного языка (в зависимости от целевого процессора) или для некоторой виртуальной машины (например, в CLIPS). Этот составленный файл может быть загружен в систему запущенной LISP с функцией загрузки и создает определения источника (функции, классы, переменные, ...) и выполняет другой код в файле.
Можно напрямую загружать исходные файлы (также используя функциональную нагрузку). Если LISP использует компилятор даже для загрузки форм, преимущество компилятора файла:
- Загрузка скомпилированного кода должна быть немного быстрее
- Некоторая проверка ошибок во время компиляции
- Возможно, более агрессивный компиляцию с более быстрым кодом во время выполнения
- Код может быть меньше (зависит)
Сохранение изображения независимо. Изображение представляет собой дамп памяти бегущего LISP. Но, как правило, не каждое состояние может быть сброшено в зависимости от системы LISP. Кандидаты вещей, которые не могут быть сброшены на изображение: подключения к файлам, сетевые подключения, открытые окна, ... так что эти вещи, возможно, должны быть вновь открыты при запуске изображения.
Если вы хотите начать приложение LISP, у одного есть несколько вариантов:
- Загрузите весь исходный код на стартап
- Загрузите весь скомпилированный код при запуске
- Загрузите изображение со всем включенным кодом
Последний, вероятно, самый быстрый. Для многих целей, которые теперь загружают скомпилированный код при запуске, также достаточно быстрая, особенно если запуск происходит только время от времени.
Давайте снова посмотрим на ваш вопрос.
(compile-file "foo.lisp")
Выше просто компилирует один файл в скомпилированный файл (FASL -файл, «Fast Load»). Эффект компиляции также заключается в том, что некоторая информация была записана в системе LISP, но определения файла недоступны. Тогда вам нужно загрузить скомпилированный файл.
(progn (load "foo.lisp") (save-application "foo"))
Выше сначала загружает файл. Обратите внимание, что LISP с инкрементным компилятором может собирать некоторые или все операторы в этом файле (CCL и SBCL делают это). Save-Application-это специфическая функция CCL, которая выбрасывает полное состояние LISP (минус файловые подключения, ...) и создает приложение, которое затем может быть запущено.
Если вы хотите создать приложения LISP, которые начинаются, как и другие приложения, Save-Application-это путь.
Если можно загрузить несколько изображений, зависит от системы. В CCL вы не можете. На липпи -машине можно загрузить базовое изображение, а затем несколько инкрементных изображений поверх этого.
Другие советы
compile-file
Делает то, что он говорит: он собирает исходный файл в собственный код и хранит результат в другом файле. Файлы, составленные с compile-file
может быть загружен с помощью load
функция Компиляция - это просто оптимизация, поэтому эффект очень похож на загрузку исходного файла напрямую.
Напротив, основные магазины изображения Полное состояние из среды LISP, включая кучу LISP (со всеми загруженным кодом и данными), а также состояние выполнения, поэтому попытка загрузить несколько основных изображений в один экземпляр LISP не имеет никакого смысла. Как описано в руководстве, вы можете Сохранить основное изображение используя (ccl:save-application "image_name")
куда image_name
Имя файла изображения, который вы хотите создать. Основное изображение можно загрузить только путем запуска нового экземпляра CL Clozure и поставки файла изображения с помощью -I
Опция командной строки.
Как правило, если вы пишете часть программного обеспечения, состоящего из нескольких исходных файлов, вы обычно действительно не хотите компилировать и загружать вещи вручную. Вместо этого рассмотрим Создание определения системы Файл и загрузка вашего программного обеспечения с помощью ASDF.