Что такое изображение Lisp?
По сути, я хотел бы знать, что такое изображение Lisp? Это кусок памяти, содержащий интерпретатор Lisp и одну или несколько программ или что?
3 ответа
Лисп образ как дамп памяти
Изображение обычно представляет собой файл. Это дамп памяти системы Lisp. Он содержит все функции (часто скомпилированные в машинный код), значения переменных, символы и т. Д. Системы Lisp. Это снимок работающего Лиспа.
Чтобы создать изображение, вы запускаете Lisp, некоторое время используете его, а затем выкидываете изображение (имя выполняемой функции зависит от реализации).
Использование изображения Lisp
В следующий раз, когда вы перезапускаете Лисп, вы можете использовать дамп-образ и получить состояние, примерно такое же, как раньше. При выгрузке изображения можно также указать Lisp, что он должен делать, когда запускается дамп-изображение. Таким образом, можно повторно подключиться к серверам, снова открыть файлы и т. Д.
Чтобы запустить такую систему Lisp, нужно ядро и образ. Иногда Lisp можно поместить как в один файл, так что исполняемый файл содержит как ядро (с некоторыми функциями времени выполнения), так и данные изображения.
На машине Lisp (компьютере, работающем под управлением операционной системы Lisp) своего рода загрузчик (FEP, Front End Processor) может загрузить образ (называемый "мир") в память и затем запустить этот образ. В этом случае нет ядра, и все, что работает на компьютере, - это образ Lisp, который содержит все функции (интерпретатор, компилятор, управление памятью, GC, сетевой стек, драйверы, ...). В основном это ОС в одном файле.
Некоторые системы Lisp оптимизируют память перед тем, как выгружать изображение. Они могут делать сборку мусора, упорядочивать объекты в памяти и т. Д.
Зачем использовать изображения?
Зачем использовать изображения? Это экономит время на загрузку, и можно предоставлять предварительно сконфигурированные системы Lisp с кодом приложения и данными пользователям. Запуск реализации Common Lisp с сохраненным изображением обычно происходит быстро - несколько миллисекунд на текущем компьютере.
Поскольку образ Lisp может содержать множество функций (компилятор, даже среда разработки, много отладочной информации и т. Д.), Его размер обычно составляет несколько мегабайт.
Использование изображений в Лисп очень похоже на то, что делают системы Smalltalk. Squeak, например, также использует образ кода и данных Smalltalk и исполняемый файл во время выполнения. Есть практическая разница: большинство современных систем Lisp используют скомпилированный машинный код. Таким образом, образ не переносим между различными процессорами (x86, x86-64, SPARC, POWER, ARM, ...) или даже операционными системами.
история
Такие изображения на Лиспе используются уже давно. Например, функция SYSOUT
В BBN Lisp с 1967 года создали такой образ. SYSIN
прочитал бы такое изображение в начале.
Примеры функций сохранения изображений
Для примера смотрите функцию save-image LispWorks или прочитайте руководство SBCL по сохранению основных образов.
Несколько реализаций языка используют "изображение" для хранения "всего", существующего в текущем контексте. Это изображение может содержать несколько уровней абстракции компиляции (т.е. промежуточный уровень анализа, промежуточный байтовый код, собственные операционные коды). Загрузка этого изображения будет намного быстрее, чем компиляция всех исходных файлов. Это очень похоже на функцию гибернации на уровне программы.
Например, если ваша lisp-реализация использует образ, то сначала вы (или поставщик компилятора) загрузите ремешок образа и сохраните его.
Тогда у вас есть два варианта: (1) либо загружать файл lisp каждый раз, когда вы вызываете lisp, либо (2) загружать весь свой lisp, сохранять изображение и использовать это изображение.
надеюсь, это поможет
В общем, это часть хранения процесса lisp (то есть всех функций и данных lisp), но не части лежащего в основе двоичного файла lisp. С положительной стороны, это дает быстрый запуск, поскольку при загрузке изображения (по существу) не нужно вести бухгалтерский учет, все просто там. С другой стороны, это означает, что какие-либо открытые файлы, сокеты и все, что у вас есть, отсутствуют, поэтому для сохранения изображений в качестве некоторой контрольной точки потребуется некоторая реализация, чтобы заставить их работать.