Rai*_*wig 28
Common Lisp实现中有几种不同的体系结构:
通常,Interpreter和字节码引擎使用最少的内存.CLISP因此非常小.SBCL OTOH生成相对较大的本机代码.
其次,有几种不同的方法来创建应用程序:
还有一些更像是编译DLL.
SBCL基本上做1.它转储包含数据和代码的内存并包含运行时.因此,您在运行系统中的所有内容(文档,源代码链接,参数列表,符号名称,调试信息,编译器本身......)都将被转储到映像+运行时.另外,SBCL生成的本机代码很大,运行时内存中可能存在大量代码信息,而SBCL包含其自身的所有功能(包括编译器).
在开发期间,经常使用这种未经优化的应用程序或图像(使用外部运行时)来工作(s/ed)以节省加载代码和数据的时间.我自己用的是大于100MB的图像.
LispWorks例如做1和2.它有一个交付过程,你可以选择性地删除东西(比如文档,编译器,源代码引用等一些功能).这也使用了树形振动器,它可以删除未使用的功能.
优化图像也可能意味着以某种压缩方式编写图像并在启动时对其进行解压缩.例如,SBCL允许这样做.
变体3过去已经完成,但目前尚未使用(除了一些专业工具和应用程序).Thinlisp,Stella,CycL,......就是这样的送货工具.在过去,还有一个商业供应商用于这样的工具(但这不再存在,IIRC的最后一个所有者是Oracle).更新:实际上是mocl,最近用于iOS和Android的Common Lisp应用程序生成器.它需要一大部分Common Lisp并将其编译为小型独立移动应用程序.例如,在iOS上,它为Apple提供的C编译器生成紧凑的C代码.