首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lisp与Python --静态编译

Lisp与Python --静态编译
EN

Stack Overflow用户
提问于 2010-05-12 01:27:50
回答 4查看 2.6K关注 0票数 13

为什么Lisp的所有动态特性都可以静态编译,而Python却不能(不会丢失所有的动态特性)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-12 01:52:10

没有什么可以阻止Python的静态编译。它的效率有点低,因为Python显示了更多可变的局部作用域,而且,为了保留一些动态属性(例如eval),您需要在编译的程序中包含编译器,但没有什么可以阻止这一点。

也就是说,研究表明,尽管大多数Python程序在静态分析下是动态的,但在运行时却是相当静态和单态的。这意味着运行时JIT编译方法在Python程序上工作得更好。有关将PyPy编译成机器码的方法,请参阅unladen-swallow,Python,machine。还有IronPython和Jython,它们使用的虚拟机原本是一种静态语言,可以把Python语言编译成机器代码。

票数 13
EN

Stack Overflow用户

发布于 2010-05-12 01:30:23

关于它的价值,Python脚本在执行时被编译成.pyc文件,请参见"Compiled" Python files

您还可以使用py2exe之类的工具将Python程序编译为可执行文件。

票数 4
EN

Stack Overflow用户

发布于 2010-05-12 22:50:44

实际上,没有任何东西阻止你静态编译Python程序,只是到目前为止还没有人编写这样的编译器(我个人发现Python的运行时比CL的运行时要容易得多)。

你可以说不同之处在于细节,比如“在实际编写编译器上花费了多少时间,该语言是否对如何编写编译器有正式的规范”。

让我们来解决这些问题:

  1. Lisp编译器已经发展了40多年,工作开始于70年代,如果不是更早的话(我不确定我的日期,太懒了,也是谷歌的确切日期)。这就产生了大量关于如何编写编译器的知识。Python名义上被设计为“教学语言”,因此编译器并不是规范中的important.
  2. Lack -- Python没有一个单独的源代码来指定该语言的确切语义。当然,您可以指向PEP文档,但它仍然不能改变这样一个事实,即唯一真正的规范是主要实现的源代码,即CPython。它是一个简单的排序编译器(转换成字节码)。

至于这是否可能-- Python使用非常简单的结构来处理符号等,即它的字典。你可以把它们当作一个程序的符号表。您可以标记数据类型以识别原始数据类型,并根据存储的命名和内部结构获取其余数据类型。语言的其余部分也非常简单。唯一缺少的是实现它的实际工作,并使其正确运行。

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

https://stackoverflow.com/questions/2812954

复制
相关文章

相似问题

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