【问题标题】:What exactly is the python interpreter implemented with?python解释器到底是用什么实现的?
【发布时间】:2014-02-12 02:55:50
【问题描述】:

我是一名编程初学者,正在尝试从“Mark Lutz 学习 Python”中学习 Python。在“介绍 Python 解释器”一章中,作者陈述了以下内容:

根据您运行的 Python 风格,解释器本身可能被实现为 C 程序、一组 Java 类或其他东西。

我无法理解如何区分一段 Python 代码以在解释器中进行划分(如作者所述,C 程序或 Java 类)。

【问题讨论】:

  • 你能澄清你最后一句话的意思吗?我不太清楚你对哪个方面感到困惑。
  • 这意味着,如果你有一段 Python 代码,还有另一段代码(用 C 或 Java 或其他方式编写),它会查看它并转换为你的计算机的编程指令。这就是所谓的解释器——否则 python 代码只会像文本文件一样有用。
  • 我猜Learning Python的作者想说的是“有不止一个Python解释器,其中一个用C实现,另一个用Java实现,还有一个用别的东西。”
  • 解释器不会查看您的代码,然后决定是用 C 还是 Java 实现。如果你有 CPython(你可能有),它是用 C 实现的。Jython 是用 Java 实现的。其他实现是用任何它们编写的。

标签: java python c


【解决方案1】:

一段 Python 代码,就是 Python 代码。作者的意思是有不同的 Python 解释器——它们都运行 Python 代码。这些不同的 Python 解释器可以是用CJavaC#Python 本身编写的程序。它们是当您在命令行键入python 或从应用程序菜单中选择python 时运行的程序。通常是 CPython:Python 软件基金会制作的语言的参考实现,用 C 语言编写。

总而言之,这对于学习 Python 绝对不是必需的 - 直接跳过,等你更熟悉该语言后再回到这个问题。

【讨论】:

    【解决方案2】:

    Python 的参考解释器,其他人用作指南的解释器,是用 C 编写的,它的昵称是 CPython(不要与不是解释器的 Cython 混淆)。它将 Python 代码编译为 Python 字节码并在其虚拟机上运行,​​该虚拟机也是用 C 编写的。

    还有其他口译员。以下是一些最知名的。

    • Jython,用 Java 编写,将 Python 编译为 Java 字节码,并在 Java 虚拟机上运行。它允许 Python 代码调用 Java 代码。不知何故。
    • IronPython,用 C# 编写(其中一些显然是由 Python 编写的),它将 Python 编译为 Microsoft 的 CLI(如果我错了,请纠正我)字节码,并在相应的虚拟机上运行。
    • PyPy,用 RPython(Python 的一个更严格的分支)编写,它将 Python 编译为 PyPy 字节码(与 CPython 字节码基本相同)并在其虚拟机上运行。更多信息:http://doc.pypy.org/en/latest/interpreter.html

    理论上和理想情况下,所有严格合法的 Python 代码都应该在其中任何一个上运行相同的代码。把它想象成不同的 C 编译器:严格合法的 C 代码将在任何编译器上编译成等效程序

    • 一个编译器允许一些非标准的东西,但另一个编译器不允许(Visual Studio 中的void main() 是非标准的)。
    • Linux 编译器无法访问 windows.h 库(就像 CPython 无法访问 Java 库一样)。
    • 它们对于不同的任务将具有不同的速度/内存性能。

    【讨论】:

      【解决方案3】:

      听起来你真正的问题是 Python 解释器是如何完成它的工作的。这是整个大学水平课程的主题,但重点在这里。

      解释器使用称为解析器的专用函数读取 Python 源代码。这是一个以上下文无关语法的形式理解 Python 语言确切结构的输入处理器。

      解析过程检查输入是否符合 Python 语法规则(此处是语法错误的来源),并生成一个数据结构,该数据结构以简单数组中表示的非常简单的步骤的形式提炼了 Python 程序的原始含义字节称为字节码。

      输入、解析、生成字节码的完整过程称为编译。是的,Python 的核心是一种简单的编译器。

      字节码执行非常基本的操作,例如算术、测试和根据测试结果跳转到其他字节码位置、字符串操作、从函数调用和返回、输入、输出以及 Python 程序执行的所有数百个基本操作,当快速组合和执行时,程序看起来很强大。

      原始 Python 源代码相当接近人类语言(嗯,有点......),字节码相当接近机器语言:处理器理解为指令的 1 和 0 的模式。字节码是程序运行时写入.pyc 文件的内容。

      只需要一个非常小而简单的程序(希望是一个快速的程序),称为字节码解释器(是的 Python 解释器中的一个解释器)来处理字节码,以便让处理器完成原来的工作Python 程序。

      当然如果.pyc文件已经存在并且比对应的源代码更新,编译可以跳过。

      你有它......几句话的大学课程。我跳过了大量的细节,并且(警告)我所写的一些内容仅适用于许多 Python 实现中的一些,但这是理解的开始。

      您的书的作者说上述所有的实现语言可能是 C 或 Java(Python 的 Jython 实现)。他遗漏了只有最小的 Python 核心是用 C 或 Java 实现的。其余的都在 Python 本身中。

      如果您有兴趣了解更多信息,这里有一些相当不错的低成本免费资源。例如,请参阅this article,也可以尝试Scheme 9 From Empty Space,了解如何实现 Python 以外的其他语言的解释器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-12
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多