【问题标题】:CPython is bytecode interpreter?CPython 是字节码解释器?
【发布时间】:2010-12-11 07:19:25
【问题描述】:

在 CPython 的上下文中,我并没有真正理解“字节码解释器”的概念。有人可以对整个画面有所了解吗?

是不是说CPython会编译执行pyc文件(字节码文件?)。那么什么编译py文件到pyc文件呢? Jython 与 CPython 有何不同(除了它们是用不同的语言实现的)。

我还在某处读到 Python 是 C++ 解释。它是否正确?那是什么意思?

我对 Python 还是很陌生,所以如果我问愚蠢的问题,请原谅我...... 非常感谢!

【问题讨论】:

    标签: c++ python interpreter bytecode cpython


    【解决方案1】:

    CPython 是 Python 在 C 中的实现。它是第一个实现,并且仍然是人们谈论 Python 时所指的主要实现。它将 .py 文件编译为 .pyc 文件。 .pyc 文件包含字节码。 CPython 实现也解释这些字节码。 CPython 不是用 C++ 编写的,它是 C。

    从 .py 到 .pyc 的编译会根据需要透明地进行。当你执行一个 .py 文件时,如果需要,它会首先编译成一个 .pyc 文件,然后再解释 .pyc 文件。

    Jython 的不同之处在于(除了用 Java 而非 C 实现之外)它将 .py 文件编译为 .class 文件,以便它们可以在 JVM 中执行。

    【讨论】:

    • Jython 是否将 Python 代码转换为 Java,然后编译为 Jave 字节码?
    • 我不知道它是否产生Java作为中间形式。
    • AFAIK Jython 可以根据要求生成 Java 作为中间形式,但它通常只生成 Java 字节码。
    【解决方案2】:

    首先:作为 python 用户,CPython 是字节码解释器这一事实对你来说并不重要。继续写代码,不用担心它是如何变成行动的。

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

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

    【讨论】:

    • 虽然晚了,但是这个解释很详细。谢谢!
    【解决方案3】:

    CPython 既是字节码编译器,也是解释器(虚拟机)。

    它会自动检测是否不存在现有的预编译器文件(.pyc),编译代码并保存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 2011-05-08
      相关资源
      最近更新 更多