为什么python在解释之前将源代码编译为字节码?

时间:2009-05-20 14:04:26

标签: python compiler-construction interpreter bytecode

为什么python在解释之前将源代码编译为字节码?

为什么不直接从源头解释?

6 个答案:

答案 0 :(得分:33)

几乎没有解释器能够直接解释代码直接 - 它的效率太低了。几乎所有的解释器都使用一些可以轻松执行的中间表示。此外,可以对此中间代码执行小的优化。

Python还存储了这段代码,这个代码在下次执行代码时具有巨大的优势:Python不再需要解析代码了;解析是编译过程中最慢的部分。因此,字节码表示相当大地减少了执行开销。

答案 1 :(得分:8)

因为你可以编译一次.pyc并多次解释它。

因此,如果您多次运行脚本,则只需要解析源代码一次。

答案 2 :(得分:7)

因为直接从字节码解释更快。一方面,它避免了做lexing的需要。

答案 3 :(得分:6)

一遍又一遍地重复和解析源代码,而不是只做一次(最常见的是第一次import),显然是一种愚蠢而毫无意义的浪费。

答案 4 :(得分:2)

虽然它有一个小的效率方面(你可以将字节码存储在磁盘或内存中),但它主要是工程:它允许你将解析与解释分开。解析器通常可以是令人讨厌的生物,充满边缘情况,并且必须遵守深奥的规则,例如使用恰当的量前瞻和解决转移减少问题。相比之下,解释非常简单:它只是一个使用字节码操作码的大转换语句。

答案 5 :(得分:-1)

我非常怀疑原因是性能,尽管这是一个很好的副作用。我想说,认为围绕某种高级汇编语言构建的虚拟机比在某些源代码字符串中查找和替换文本更加实用是很自然的。

编辑:

好吧,显而易见,谁在我的帖子上投了-1票而没有留下合理的解释来解释虚拟机(运行时环境)知之甚少。

http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Erik-Meijer-and-Lars-Bak-Inside-V8-A-Javascript-Virtual-Machine/