CPython是字节码解释器吗?

10

我不太理解在CPython中,“字节码解释器”的概念。能否有人对整个情况进行一些解释呢?

这是不是意味着CPython将编译和执行pyc文件(字节码文件)?那么是什么将py文件编译为pyc文件?Jython与CPython有何不同(除了它们是用不同的语言实现的)?

我还在某个地方读到Python是C++解释。这是正确的吗?这意味着什么?

我对Python还非常陌生,所以请原谅我提出这样的愚蠢问题...... 非常感谢!

3个回答

16

CPython是使用C语言实现的Python解释器。这是第一个实现版本,当人们谈论Python时,它仍然是主要版本。它将.py文件编译为.pyc文件。.pyc文件包含字节码。CPython实现还解释这些字节码。

从.py到.pyc的编译会在需要时自动进行。当您执行.py文件时,如果需要,它将首先被编译为.pyc文件,然后再被解释。

Jython有所不同,因为它是用Java而不是C实现的,它将.py文件编译为.class文件,以便在JVM中执行。


Jython是否将Python代码转换为Java,并编译为Java字节码? - Nope
我不知道它是否会产生Java作为中间形式。 - Ned Batchelder
5
据我所知,Jython可以在请求时生成Java作为中间形式,但通常只会生成Java字节码。 - MAK

14

首先:CPython作为字节码解释器对Python用户并不重要。您可以编写代码,无需担心它如何转换为操作。

因此,为了回答您的问题并满足您的好奇心,以下是发生的情况:CPython读取Python源代码,并将其编译为Python字节码,存储在.pyc文件中。然后使用字节码解释器执行该代码。这种设计将Python的解析与执行分离,使解释器的两个部分都更简单。

Jython仅是前半部分-它读取Python源代码,并输出Java字节码,然后由JVM解释。它与CPython具有相同的架构,但存在两个值得注意的区别:一:Java字节码是标准化和文档化的,而CPython字节码被认为是Python内部的,随时可能更改。二:JVM比CPython解释器复杂得多。JVM拥有世界上最先进的JIT引擎之一,而CPython解释器相对简单。


1
虽然晚了,但这是一个非常详细的解释。谢谢! - huy

8

CPython是同时充当字节码编译器和解释器(虚拟机)的。

它会自动检测是否存在预编译文件(.pyc),如果没有,就对代码进行编译,并保存输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接