[英]What exactly is the python interpreter implemented with?
我是编程的初学者,并且尝试从“学习Mark Lutz的Python”中学习Python。 在“ Python解释器简介”一章中,作者陈述了以下内容:
取决于运行的Python风格,解释器本身可以实现为C程序,一组Java类或其他形式。
我无法理解如何区分一段Python代码,以便在解释器中进行划分(作者声明是C程序还是Java类)。
Python的参考解释器(其他人用作指导)使用C语言编写,并且被昵称为CPython(不要与不是解释器的Cython混淆)。 它将Python代码编译为Python字节码,并在其虚拟机上运行,该虚拟机也用C编写。
还有其他口译员。 以下是一些最著名的。
从理论上和理想情况下,所有严格合法的Python代码都应在其中任何一个上运行相同的代码。 可以将其视为针对C的不同编译器:严格合法的C代码将在任何编译器上编译为等效程序
void main()
Visual Studio中的void main()
是非标准的)。 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.