Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是Lisp图像?_Lisp_Common Lisp - Fatal编程技术网

什么是Lisp图像?

什么是Lisp图像?,lisp,common-lisp,Lisp,Common Lisp,本质上,我想知道什么是Lisp图像?它是包含Lisp解释器和一个或多个程序的内存片还是什么?一些语言实现使用“映像”来存储“所有”内容 在当前环境下。此图像可能包含多个编译抽象层(即。 中间解析级别、中间字节码、本机操作码)。加载这个 映像将比编译所有源文件快得多。这很像 休眠功能,在程序级别 例如,如果您的lisp实现使用图像,那么首先您(或编译器 供应商将)引导映像并保存它 然后有两个选项:(1)每次调用lisp时加载lisp文件,或者(2)加载所有lisp文件,保存图像并使用此图像 希望这

本质上,我想知道什么是Lisp图像?它是包含Lisp解释器和一个或多个程序的内存片还是什么?

一些语言实现使用“映像”来存储“所有”内容 在当前环境下。此图像可能包含多个编译抽象层(即。 中间解析级别、中间字节码、本机操作码)。加载这个 映像将比编译所有源文件快得多。这很像 休眠功能,在程序级别

例如,如果您的lisp实现使用图像,那么首先您(或编译器 供应商将)引导映像并保存它

然后有两个选项:(1)每次调用lisp时加载lisp文件,或者(2)加载所有lisp文件,保存图像并使用此图像


希望这会有所帮助一般来说,它是lisp过程的存储部分(即所有“lisp”函数和数据),而不是底层lisp二进制文件的任何部分。从好的方面来说,这提供了一个快速启动,因为在加载图像时(基本上)不需要进行簿记,一切都在那里。另一方面,它意味着任何打开的文件、套接字和丢失的内容,因此将图像保存为某种检查点需要一些实现才能正常工作。

将Lisp图像作为转储内存保存。

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

要创建一个映像,可以启动Lisp,使用它一段时间,然后转储一个映像(要执行的函数的名称取决于实现)

使用Lisp图像

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

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

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

一些Lisp系统会在转储图像之前优化内存。他们可以进行垃圾收集,对内存中的对象进行排序,等等

为什么使用图像?

为什么要使用图像?它节省了加载东西的时间,并且可以为用户提供预配置的Lisp系统以及应用程序代码和数据。使用保存的映像启动公共Lisp实现通常很快—在当前计算机上只需几毫秒

由于Lisp映像可能包含许多功能(编译器、甚至开发环境、大量调试信息等等),因此它的大小通常为几兆字节

在Lisp中使用图像与Smalltalk系统的功能非常相似。例如,Squeak还使用Smalltalk代码和数据的映像以及运行时可执行文件。有一个实际的区别:大多数当前的Lisp系统使用编译后的机器代码。因此,映像无法在不同的处理器体系结构(x86、x86-64、SPARC、POWER、ARM等)甚至操作系统之间移植

历史

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

保存图像的功能示例


有关示例,请参阅上的功能或阅读手册。

此图片可能有助于您理解:@juanitofatas dead link