我是一个lisp初学者,有一个问题。当我直接在REPL中编写一些代码时(没有任何.lisp文件!),我如何保存解释器的工作/状态以下次恢复它并继续工作?
(我正在使用ECL)
谢谢!很抱歉我的英语不好;)
来自ECL手册:
传统上,公共Lisp实现提供了一个函数来保存转储的所有数据将Lisp进程运行到文件中。这个结果被称为Lisp映像并且可以与其他版本兼容实现。如今,对它运行的系统的控制越来越少因此,Lisp实现必须非常努力地转储内存映像并且能够在之后加载并执行它们。ECL选择完全避免这个过程。相反,我们认为五种不同的可移植模型,用于构建和发布程序。表1.1所示的模型列举了不同种类的ECL可以移植生成的文件。得到一个或多个对于表中提到的产品,您可以使用低级API如第三部分所述。然而,我们推荐一种更简单的方法,基于使用系统定义文件来描述您的项目,并让ECL为您构建所需的目标。这种方法是
(强调我的)所以看起来,你在ECL上运气不好。但是,clp、CCL和SBCL支持此功能,因此,如果您需要它并且可以选择切换…
正如Dirk提到的,您可以在许多Lisp实现中保存图像。然而,虽然这满足了您的要求,但将代码仅保留在图像中的并不是一个好主意,因为这样很难或不可能编辑。能够获得函数的源代码是一个可选的特性(即使它存在,您也会丢失注释和格式),并且许多其他类型的定义根本无法以标准方式恢复。
另一方面,如果您在REPL中有详细的设置或编译时间较长,则可以使用映像来保存和恢复您的工作。
(一些系统,特别是Smalltalk,确实促进了在映像中编辑代码,并且有编辑和导出功能来支持这一点,但是标准化的Common Lisp没有,我也不知道任何现代CL实现都有。)