繁体   English   中英

python解释器到底实现了什么?

[英]What exactly is the python interpreter implemented with?

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

取决于运行的Python风格,解释器本身可以实现为C程序,一组Java类或其他形式。

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

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

总而言之,这对于学习Python绝对不是必需的-只需略过,然后在对语言更加熟悉后再回到这个问题。

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代码将在任何编译器上编译为等效程序

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

听起来您的真正问题是Python解释器如何执行它的工作。 这是整个大学课程的主题,但这是重点。

解释器使用称为解析器的特殊功能读取Python源。 这是一个输入处理器,它以上下文无关文法的形式理解Python语言的确切结构。

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

输入,解析和字节码生成的完整过程称为编译。 是的,Python本质上具有一种简单的编译器。

字节码执行非常基本的操作,例如算术,测试以及基于测试结果,字符串操作,从函数的调用和返回,输入,输出以及结合在一起的Python程序执行的所有数百种基本运算,跳转到其他字节码位置并快速执行,使程序看起来功能强大。

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

它只需要一个相当小的和简单的程序(最好是一个快速的程序)来调用字节码解释器(是Python解释器中的解释器)就可以处理字节码,以使处理器完成原始Python程序想要的工作。

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

那里有...一门大学课程,只需几句话。 我略过了很多细节,(警告)我写的一些内容仅适用于其中的许多Python实现,但这只是了解的开始。

您的书的作者说上述所有实现语言都可以是C或Java(Python的Jython实现)。 他没有提到仅使用C或Java实现Python的最小核心。 其余的在Python本身中。

如果您有兴趣了解更多信息,可以找到一些价格合理且价格合理的免费资源。 例如,请参见本文 ,也不要花太多钱,请尝试“ 计划9来自空的空间”,以了解如何实现除Python外的其他语言的解释器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM