Сохранение состояния lisp - PullRequest
4 голосов
/ 07 октября 2011

Я новичок в lisp и у меня есть вопрос. Когда я пишу код прямо в REPL (без файла .lisp!), Как я могу сохранить свою работу / состояние интерпретатора, чтобы в следующий раз восстановить его и продолжить работу?

(я использую ECL)

Thanx! И извините за мой ломаный английский;)

Ответы [ 2 ]

6 голосов
/ 07 октября 2011

Из руководства ECL :

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

ECL решил полностью избежать этого процесса .Вместо этого мы создаем пять разных портативных моделей для сборки и доставки ваших программ.Модели, описанные в Таблице 1.1, перечисляют различные типы файлов, которые ECL может портировать.Чтобы получить один или несколько продуктов, упомянутых в таблице, вы можете прибегнуть к низкоуровневому API, описанному в части III.Однако мы рекомендуем более простой способ, основанный на использовании файлов определения системы, чтобы описать структуру вашего проекта и позволить ECL построить желаемую цель для вас.Этот подход описан в следующих разделах.

(выделено мной), так что, кажется, вам не повезло с ECL.Тем не менее, CLISP , CCL и SBCL поддерживают эту функцию, поэтому, если вы хотите, и если переключение является опцией ... Попробуйте один из них.

1 голос
/ 08 октября 2011

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

С другой стороны, можно использовать изображение просто для сохранения и возобновления работы, если у вас есть сложные настройки в REPL или длительное время компиляции.

(Некоторые системы, в частности Smalltalk, действительно поддерживают редактирование кода в изображении и имеют средства редактирования и экспорта для поддержки этого, но Common Lisp, как стандартизированный, этого не делает, и я не знаю ни одной современной реализации CL, которая это делает.)

...