4

我是 lisp 的初学者,有一个问题。当我直接在 REPL 中编写一些代码(没有任何 .lisp 文件!)时,如何保存解释器的工作/状态以在下次恢复并继续工作?

(我正在使用 ECL)

谢谢!对不起我的英语不好;)

4

2 回答 2

6

ECL 手册

传统上,Common Lisp 实现提供了一个功能,可以将正在运行的 Lisp 进程中的所有数据转储到文件中。结果被称为 Lisp 映像,并且可以运送到其他版本兼容的实现。如今,对其运行的系统的控制较少,Lisp 实现必须非常努力地转储内存映像,然后能够加载和执行它们。

ECL 选择完全避免这个过程。相反,我们设想了五种不同的便携式模型来构建和交付您的程序。表 1.1 中描述的模型列举了 ECL 可以便携生成的不同类型的文件。要获得表中提到的一种或多种产品,您可以求助于第 III 部分中描述的低级 API。但是,我们推荐一种基于使用系统定义文件的更简单的方法来描述您的项目结构,并让 ECL 为您构建所需的目标。此方法将在以下各节中介绍。

(强调我的)看来,您对 ECL 不走运。但是,CLISPCCLSBCL支持此功能,因此,如果您需要它并且可以选择切换...试试其中一个。

于 2011-10-07T11:03:23.423 回答
1

正如 Dirk 提到的,您可以在许多 Lisp 实现中保存图像。但是,虽然这符合您的要求,但将代码保留在图像中并不是一个好主意,因为这样会更难或无法编辑。能够获取函数的源代码是一项可选功能(即使它存在,您也会丢失注释和格式),并且许多其他类型的定义根本无法以标准方式恢复。

另一方面,如果您在 REPL 中进行了精心设置或编译时间较长,则可以使用图像来保存和恢复您的工作。

(一些系统,特别是 Smalltalk,确实促进了图像中的编辑代码,并具有支持这一点的编辑和导出工具,但是标准化的 Common Lisp 没有,我也不知道有任何现代 CL 实现可以这样做。)

于 2011-10-07T20:03:19.577 回答