为什么Lisp的所有动态特性都可以静态编译,而Python却不能(不会丢失所有的动态特性)?
发布于 2010-05-12 01:52:10
没有什么可以阻止Python的静态编译。它的效率有点低,因为Python显示了更多可变的局部作用域,而且,为了保留一些动态属性(例如eval),您需要在编译的程序中包含编译器,但没有什么可以阻止这一点。
也就是说,研究表明,尽管大多数Python程序在静态分析下是动态的,但在运行时却是相当静态和单态的。这意味着运行时JIT编译方法在Python程序上工作得更好。有关将PyPy编译成机器码的方法,请参阅unladen-swallow,Python,machine。还有IronPython和Jython,它们使用的虚拟机原本是一种静态语言,可以把Python语言编译成机器代码。
发布于 2010-05-12 01:30:23
关于它的价值,Python脚本在执行时被编译成.pyc文件,请参见"Compiled" Python files。
您还可以使用py2exe之类的工具将Python程序编译为可执行文件。
发布于 2010-05-12 22:50:44
实际上,没有任何东西阻止你静态编译Python程序,只是到目前为止还没有人编写这样的编译器(我个人发现Python的运行时比CL的运行时要容易得多)。
你可以说不同之处在于细节,比如“在实际编写编译器上花费了多少时间,该语言是否对如何编写编译器有正式的规范”。
让我们来解决这些问题:
至于这是否可能-- Python使用非常简单的结构来处理符号等,即它的字典。你可以把它们当作一个程序的符号表。您可以标记数据类型以识别原始数据类型,并根据存储的命名和内部结构获取其余数据类型。语言的其余部分也非常简单。唯一缺少的是实现它的实际工作,并使其正确运行。
https://stackoverflow.com/questions/2812954
复制相似问题