为什么python在解释之前将源代码编译为字节码?
为什么不直接从源头解释呢?
几乎没有解释器真正地直接逐行解释代码——这实在是太低效了。几乎所有解释器都使用一些可以轻松执行的中间表示。此外,可以对这个中间代码进行小的优化。
Python 还存储了这段代码,这对于下次执行这段代码有很大的好处:Python 不再需要解析代码;解析是编译过程中最慢的部分。因此,字节码表示大大减少了执行开销。
因为您可以编译.pyc
一次并从中多次解释。
因此,如果您多次运行脚本,您只需解析一次源代码的开销。
因为直接从字节码解释更快。一方面,它避免了进行词法分析的需要。
一遍又一遍地重新分析和解析源代码,而不是只做一次(通常是第一次import
),显然是一种愚蠢而毫无意义的浪费努力。
虽然它有一个小的效率方面(您可以将字节码存储在磁盘或内存中),但它主要是工程:它允许您将解析与解释分开。解析器通常是令人讨厌的生物,充满了边缘情况,并且必须遵守深奥的规则,例如使用适量的前瞻和解决移位减少问题。相比之下,解释非常简单:它只是一个使用字节码操作码的大 switch 语句。
我非常怀疑原因是性能,尽管它是一个很好的副作用。我想说的是,自然而然地认为围绕某种高级汇编语言构建的 VM 比在某些源代码字符串中查找和替换文本更实用。
编辑:
好吧,很明显,谁曾在我的帖子上投过 -1 票而没有留下合理的评论来解释,他们对虚拟机(运行时环境)知之甚少。