什么是Lisp图像?

本质上,我想知道一个Lisp图像是什么?是否包含Lisp解释器和一个或多个程序的内存片段?
Lisp图像作为倾销内存

图像通常是一个文件。它是一个Lisp系统的内存转储。它包含Lisp系统的所有功能(通常编译为机器代码),变量值,符号等。它是一个正在运行的Lisp的快照。

要创建一个图像,一个启动Lisp,使用它一段时间,然后一次转储一个图像(这个功能的名称取决于实现)。

使用Lisp图像

下次重新启动Lisp时,可以使用转储的映像,并大致获得一个状态,大概在之前。当转储图像时,还可以告诉Lisp当转储图像启动时应该做什么。这样可以重新连接到服务器,再次打开文件等。

要启动这样的Lisp系统,需要一个内核和一个映像。有时,Lisp可以将两者都放在单个文件中,以便可执行文件同时包含内核(具有一些运行时功能)和图像数据。

在Lisp机器(运行Lisp操作系统的计算机)上,一种引导加载程序(FEP,前端处理器)可以将映像(称为“世界”)加载到内存中,然后启动此映像。在这种情况下,没有内核,所有在计算机上运行的是这个Lisp映像,其中包含所有功能(解释器,编译器,内存管理,GC,网络堆栈,驱动程序,…)。基本上它是单个文件中的操作系统。

一些Lisp系统将在转储映像之前优化内存。他们可能会做垃圾收集,订购内存中的对象等。

为什么要使用图像?

为什么会使用图像?它可以节省加载时间,并可以向用户提供应用程序代码和数据的预配置Lisp系统。使用保存的映像启动Common Lisp实现通常是快速的 – 在当前计算机上几毫秒。

由于Lisp映像可能包含很多功能(一个编译器,甚至一个开发环境,大量的调试信息,…),它的大小通常是几兆字节。

在Lisp中使用图像非常类似于Smalltalk系统所做的。例如Squeak也使用了Smalltalk代码和数据的映像以及运行时可执行文件。有一个实际的区别:大多数当前的Lisp系统使用编译的机器码。因此,图像在不同处理器架构(x86,x86-64,SPARC,POWER,ARM,…)或甚至操作系统之间不可移植。

历史

这样的Lisp图像已经很长时间了。例如,从1967年的BBN Lisp中的SYSOUT函数创建了这样的图像。 SYSIN会在开始时读取这样的图像。

功能保存图像的示例

有关示例,请参阅LispWorks功能save-imagesaving core images上的SBCL手册。

http://stackoverflow.com/questions/480083/what-is-a-lisp-image

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:什么是Lisp图像?