首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lisp二进制大小

Lisp二进制大小
EN

Stack Overflow用户
提问于 2012-06-14 23:09:09
回答 1查看 2.7K关注 0票数 14

由于我对人工智能很感兴趣,我最近决定尝试一下Lisp。在用常用的lisp编译器sbcl编译了一个非常大的basic application之后,我注意到生成的二进制文件非常大(大约43MB)。我对这其中的原因很感兴趣。这是(常见的) lisp的常见问题吗?这种行为的技术背景是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-14 23:39:03

Common Lisp实现中有几种不同的体系结构:

  • interpreter
  • byte代码引擎(CLISP是通过C编译器的example)
  • compilation (ECL是example)
  • native代码编译器(SBCL、LispWorks、Clozure CL))

通常,解释器和字节码引擎使用的内存最少。因此,CLISP非常小。SBCL OTOH生成相对较大的本机代码。

其次,有几种不同的方法来创建applications

  1. 保存图像
  2. 保存优化的代码到C代码

再加上一些更像编译成DLL的东西。

SBCL基本上执行1.它转储包含数据和代码的内存,并包含运行时。因此,您在运行系统中拥有的所有内容(文档、源代码链接、参数列表、符号名称、调试信息、编译器本身,等等)将被转储到image+runtime中。此外,SBCL生成的本机代码很大,在运行时内存中可能有大量的代码信息,并且SBCL包含它自己的所有功能(包括编译器)。

在开发期间,人们经常使用(s/ed)这样的未优化的应用程序或映像(使用外部运行时),以节省加载代码和数据的时间。我自己也用过大于100MB的图片。

例如,LispWorks做了1和2。它有一个交付过程,在这个过程中,你可以有选择地删除一些东西(比如文档、一些功能,比如编译器、源代码引用等等)。这也使用了一个树振动器,它可以删除不使用的功能。

优化图像也可能意味着以某种压缩的方式编写它,并在启动时解压它。例如,SBCL允许这样做。

变体3是在过去完成的,但目前没有使用(除了在一些专门的工具和应用程序中)。Thinlisp,Stella,CycL,...就是这样的交付工具。在过去,也有这样的工具的商业供应商(但现在已经不存在了,IIRC是/曾经是Oracle的最后所有者)。更新:实际上,最近为iOS和安卓开发的Common Lisp应用生成器mocl做到了这一点。它使用Common Lisp的一个很大的子集,并将其编译成小型的独立移动应用程序。例如,在iOS上,它为苹果提供的C编译器生成紧凑的C代码。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11036070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档