Сохранение состояния lisp
Я новичок в LISP и у меня есть вопрос. Когда я пишу некоторый код непосредственно в REPL (без файла.lisp!), Как я могу сохранить свою работу / состояние интерпретатора, чтобы восстановить его в следующий раз и продолжить работу?
(Я использую ECL)
Thanx! И извините за мой ломаный английский;)
2 ответа
Из руководства ECL:
Традиционно реализации Common Lisp предоставляют функцию для сохранения дампа всех данных из запущенного процесса Lisp в файл. Результат назывался изображением Lisp и мог быть отправлен в другие совместимые с версией реализации. В настоящее время, имея меньший контроль над системами, в которых он работает, реализация Lisp должна работать очень усердно, чтобы создавать дамп памяти образов и иметь возможность загружать и выполнять их впоследствии.
ECL решил полностью избежать этого процесса. Вместо этого мы создаем пять разных портативных моделей для сборки и доставки ваших программ. Модели, описанные в Таблице 1.1, перечисляют различные типы файлов, которые ECL может портировать. Чтобы получить один или несколько продуктов, упомянутых в таблице, вы можете прибегнуть к низкоуровневому API, описанному в части III. Однако мы рекомендуем более простой способ, основанный на использовании файлов определения системы, чтобы описать структуру вашего проекта и позволить ECL построить желаемую цель для вас. Этот подход описан в следующих разделах.
(выделение мое), так что, кажется, вам не повезло с ECL. Тем не менее, CLISP, CCL и SBCL поддерживают эту функцию, поэтому, если вы хотите, и если переключение является опцией... Попробуйте один из них.
Как упоминает Дирк, вы можете сохранить изображение во многих реализациях Lisp. Однако, хотя это соответствует вашим заявленным требованиям, не стоит хранить ваш код только в изображении, потому что его потом сложнее или невозможно редактировать. Возможность получить исходный код функции является дополнительной функцией (и даже если она существует, вы теряете комментарии и форматирование), и многие другие типы определений вообще невозможно восстановить стандартными способами.
С другой стороны, хорошо использовать изображение только для сохранения и возобновления работы, если у вас есть сложные настройки в REPL или долгое время компиляции.
(Некоторые системы, в частности Smalltalk, поддерживают редактирование кода в изображении и имеют средства редактирования и экспорта для поддержки этого, но Common Lisp, как стандартизированный, этого не делает, и я не знаю ни одной современной реализации CL, которая это делает.)