Что такое изображение Lisp? - PullRequest
       21

Что такое изображение Lisp?

24 голосов
/ 26 января 2009

По сути, я хотел бы знать, что такое изображение Lisp? Это кусок памяти, содержащий интерпретатор Lisp и одну или несколько программ или что?

Ответы [ 3 ]

39 голосов
/ 25 февраля 2009

Лисп-образ как дамп памяти

Изображение обычно представляет собой файл. Это дамп памяти системы Lisp. Он содержит все функции (часто скомпилированные в машинный код), значения переменных, символы и т. Д. Системы Lisp. Это снимок работающего Лиспа.

Чтобы создать изображение, нужно запустить Lisp, использовать его некоторое время, а затем сбросить изображение (имя функции, которая зависит от реализации).

Использование изображения Lisp

В следующий раз, когда вы перезапускаете Лисп, вы можете использовать выгруженное изображение и получить состояние примерно на том же уровне, что и раньше. При выгрузке изображения также можно указать Lisp, что он должен делать, когда запускается дамп-изображение. Таким образом, можно повторно подключиться к серверам, снова открыть файлы и т. Д.

Чтобы запустить такую ​​систему на Лиспе, нужно ядро ​​и образ. Иногда Lisp можно поместить как в один файл, так что исполняемый файл содержит как ядро ​​(с некоторыми функциями времени выполнения), так и данные изображения.

На машине Lisp (компьютере, работающем под управлением операционной системы Lisp) своего рода загрузчик (FEP, Front End Processor) может загрузить образ (называемый «мир») в память и затем запустить этот образ. В этом случае нет ядра, и все, что работает на компьютере, - это образ Lisp, который содержит все функции (интерпретатор, компилятор, управление памятью, GC, сетевой стек, драйверы, ...). По сути это ОС в одном файле.

Некоторые системы Lisp оптимизируют память перед выгрузкой образа. Они могут выполнять сборку мусора, размещать объекты в памяти и т. Д.

Зачем использовать изображения?

Зачем использовать изображения? Это экономит время на загрузку, и можно предоставлять предварительно сконфигурированные системы Lisp с кодом приложения и данными пользователям. Запуск реализации Common Lisp с сохраненным изображением обычно выполняется быстро - несколько миллисекунд на текущем компьютере.

Поскольку образ Lisp может содержать множество функций (компилятор, даже среда разработки, много отладочной информации, ...), его размер обычно составляет несколько мегабайт.

Использование изображений в Lisp очень похоже на то, что делают системы Smalltalk. Squeak, например, также использует образ кода и данных Smalltalk и исполняемый файл во время выполнения. Существует практическое отличие: большинство современных систем Lisp используют скомпилированный машинный код. Таким образом, образ не переносим между различными процессорами (x86, x86-64, SPARC, POWER, ARM, ...) или даже операционными системами.

История

Такие изображения на Лиспе используются уже давно. Например, функция SYSOUT в BBN Lisp с 1967 года создала такой образ. SYSIN будет читать такое изображение при запуске.

Примеры функций сохранения изображений

Например, см. Функцию save-image из LispWorks или прочитайте руководство SBCL по сохранению основных образов .

7 голосов
/ 26 января 2009

Несколько языковых реализаций используют «образ» для хранения «всего», что есть в текущем контексте. На этом изображении может быть несколько уровней абстракции компиляции (т.е. промежуточный уровень разбора, промежуточный байт-код, собственные операционные коды). Загрузка это Изображение будет намного быстрее, чем компилировать все исходные файлы. Это очень похоже на функция гибернации на уровне программы.

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

Тогда у вас есть два варианта: (1) загружать файл lisp каждый раз, когда вы вызываете lisp, или (2) загружать весь свой lisp, сохранять изображение и использовать это изображение

Надеюсь, что поможет

6 голосов
/ 27 января 2009

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

...