Lisp解释器和Lisp映像之间的区别和关系是什么?它们可以用作同义词吗?



我注意到有些人把这些术语当作同义词来使用。

例如,在相同的场景中,我听到"将此函数添加到lisp图像中对其进行评估";并将该函数求值到Lisp解释器中,以便以后使用它。

然而,我不确定这种用法在技术上是否精确。因此,这个问题。

这是两个正交的概念。让我们从通常全面的Common Lisp Glossary开始:

Lisp形象n.公共Lisp实现的运行实例。一个Lisp图像的特点是有一个单一的地址空间,在这个地址空间中,任何对象都可以根据这个规范直接引用任何另一个对象,并且有一个单一的、通用的全局环境

因此,关键思想是映像是一组相互引用的Lisp对象(函数和数据),可以在程序执行期间"调用"或"访问"。

Common Lisp程序的执行方式取决于系统的实现方式。例如,它可以通过机器语言的编译来执行,也可以通过某种形式的解释(甚至是两者的混合)来执行。因此,Lisp解释器只是完成实现的一种特定方式(在当前的Common Lisp系统中,有许多不同的方式来实现该语言)。

图片

"Image"是磁盘上的文件。

"添加一个函数到图像">

表示计算函数并保存图像,因此该函数在下次调用时立即可用。

REPL

"Interpreter"(通常)是错误的抽象层次;应该使用"REPL"代替。例如,SBCL根本没有解释器(所有内容都是编译的),但这不是与本主题相关的细节。

"将此函数eval到Lisp解释器中以供以后使用">

表示计算当前REPL中的函数,并在同一进程中使用它(即,在Lisp重新启动之前它是可用的)。

图片是Lisp的副本写入磁盘(或其他辅助存储器)。Lisp堆是计算机RAM中用于存储数据的内存。要将Lisp堆写入映像,需要停止正在运行的Lisp,并将内存转储到磁盘。然后Lisp被恢复或退出。

该映像可用于在启动新Lisp时恢复堆。这通常比启动一个新的Lisp然后加载相应的软件要快。

Lisp解释器是一个从源代码执行Lisp程序的程序。许多Lisp实现不使用解释器,但它们执行编译后的Lisp代码,通常是编译成本机机器码的Lisp代码。

相关内容

  • 没有找到相关文章