15

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

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

4

6 回答 6

38

几乎没有解释器真正地直接逐行解释代码——这实在是太低效了。几乎所有解释器都使用一些可以轻松执行的中间表示。此外,可以对这个中间代码进行小的优化。

Python 还存储了这段代码,这对于下次执行这段代码有很大的好处:Python 不再需要解析代码;解析是编译过程中最慢的部分。因此,字节码表示大大减少了执行开销。

于 2009-05-20T14:07:45.037 回答
8

因为您可以编译.pyc一次并从中多次解释。

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

于 2009-05-20T14:07:35.990 回答
7

因为直接从字节码解释更快。一方面,它避免了进行词法分析的需要。

于 2009-05-20T14:07:17.970 回答
6

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

于 2009-05-20T14:12:39.520 回答
3

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

于 2009-07-27T16:55:51.280 回答
0

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

编辑:

好吧,很明显,谁曾在我的帖子上投过 -1 票而没有留下合理的评论来解释,他们对虚拟机(运行时环境)知之甚少。

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

于 2009-07-26T11:03:26.430 回答