【发布时间】:2011-10-07 10:51:33
【问题描述】:
我是 lisp 的初学者,有一个问题。 当我直接在 REPL 中编写一些代码时(没有任何 .lisp 文件!),如何保存我的解释器的工作/状态以便下次恢复并继续工作?
(我正在使用 ECL)
谢谢!对不起我的英语不好;)
【问题讨论】:
标签: image lisp common-lisp dump ecl
我是 lisp 的初学者,有一个问题。 当我直接在 REPL 中编写一些代码时(没有任何 .lisp 文件!),如何保存我的解释器的工作/状态以便下次恢复并继续工作?
(我正在使用 ECL)
谢谢!对不起我的英语不好;)
【问题讨论】:
标签: image lisp common-lisp dump ecl
来自ECL manual:
传统上,Common Lisp 实现提供了一个函数 保存转储中的所有数据 将 Lisp 进程运行到文件中。结果被称为 Lisp 图像 并且可以运送到其他兼容的版本 implementations.Nowadays,对其运行的系统的控制较少 在,Lisp 实现必须非常努力地转储内存图像 并能够在之后加载和执行它们。
ECL 选择完全避免此过程。相反,我们设想 五种不同的便携式模型,用于构建和交付您的程序。 表 1.1 中描述的模型列举了不同种类的 ECL 可以便携式生成的文件。获得一项或多项 表中提到的产品,您可以使用低级 API 在第三部分中描述。但是,我们推荐一种更简单的方法,基于 使用系统定义文件来描述你的结构 项目并让 ECL 为您构建所需的目标。这种方法是 将在以下部分进行介绍。
(强调我的)看来,您对 ECL 不走运。但是,CLISP、CCL 和 SBCL 支持此功能,因此,如果您需要它并且可以选择切换...试试其中一个。
【讨论】:
正如 Dirk 所提到的,您可以在许多 Lisp 实现中保存图像。然而,虽然这符合您的要求,但将代码仅保留在图像中并不是一个好主意,因为这样会更难或无法编辑。能够获取函数的源代码是一项可选功能(即使它存在,您也会丢失 cmets 和格式化),而许多其他类型的定义根本无法以标准方式恢复。
另一方面,如果您在 REPL 中进行了精心设置或编译时间较长,则可以使用图像来保存和恢复您的工作。
(一些系统,尤其是 Smalltalk,确实促进了图像内的编辑代码,并具有编辑和导出工具来支持这一点,但标准化的 Common Lisp 没有,我也不知道有任何现代 CL 实现。)
【讨论】: