Я слышал, что большинство лиспов поддерживают сохранение образа работающей программы в файл. Поддерживает ли это хитрость?
Сохранение образа программы в guile
- Вы имеете в виду сохранение продолжения в файл? Я думаю, что это прояснит вопрос для людей, читающих это. 01.12.2010
- Я не думаю, что он имеет в виду сохранение продолжения в файл, скорее он хочет определить функции в реплике, сохранить состояние интерпретатора, закрыть интерпретатор и перезагрузить машину или что-то еще, затем открыть реплику и загрузить файл изображения , восстановив реплику в том виде, в каком она была до того, как он ушел. 08.12.2010
- Да! Это то, чего я хотел. Я нашел эту функцию в интерпретаторе схемы scm, но не в хитрости. 08.12.2010
Ответы:
Я думаю, что взаимодействие с другими языками является неотъемлемой частью того, чем является Guile, поэтому в образе интерпретатора есть много состояний, непрозрачных для самого Guile. Я лучше всего знаю Guile по работе с ним как интерпретатором схем, встроенным в gEDA, так что можете ли вы представить, что вам нужно сохранять не только все CONS, но и все X-окна, которые может открыть gschem? Это просто невозможно сделать надежно изнутри Guile. (И я не уверен, что было бы хорошей идеей реализовать сохранение изображения в файл даже в «ограниченных» случаях.)
Тем не менее, в конечном счете, вы можете сохранить состояние программы, но поскольку границы программы настолько прозрачны, что из каждой поры просачиваются файловые дескрипторы и карты памяти, вы вскоре понимаете, что вам нужно сохранить состояние всего компьютера. Делается это правда, в виде режима энергосбережения "гибернация"! Я также понимаю, что это не то, что вам здесь нужно.
Это может сделать SBCL, реализация Common Lisp. (Также см. этот краткий учебник по SBCL). Если вы заинтересованы в изучении других динамических языков, которые могут сохранять и восстанавливать состояние системы (включая продолжения, дескрипторы открытых файлов и т. д.), посмотрите Писк.