编译自:http://www.aosabook.org/en/500L/a-python-interpreter-written-in-python.html 作者:Taavi Burns 翻译:鸿 如有翻译问题或建议,请公众号留言
导论 Byterun是一个用Python实现的Python解释器。它的结构类似于CPython(Python的主流实现方式)。
Python解释器 在本文中,“解释器”的含义指的是运行Python程序的最后一步。在解释器处理之前,Python代码还会经过:词法分析,语法解析和编译。经历过这些步骤,Python源代码便从文本行转换为解释器可以理解的结构化的指令代码对象。解释者的工作是获取这些代码对象并按照说明操作。Python被称为“解释型语言”是因为编译步骤的工作量相对于编译语言较少(而解释器的工作量相对较多)。
Python写的Python解释器 Byterun是一个用Python编写的Python解释器。不要奇怪,现在广泛使用的C编译器gcc就是用C语言编写的。所以,可以使用绝大多数编程语言编写Python解释器。 用Python编写Python解释器既有优点也有缺点。最大的缺点就是运行速度:Byterun执行代码要比在CPython中执行代码慢得多。但是,Byterun最初是作为一种学习而设计的,所以速度对我们来说并不重要。使用Python的最大优点是我们可以更容易地实现解释器。例如,当需要创建一个类时,Byterun可以回退到“真正的”Python。另一个优点就是是Byterun易于理解。
解释器的工作原理 Python解释器如何工作的呢?首先,Python解释器是一个虚拟机,这意味着它是模拟物理计算机运行的软件,并且也是一个堆栈机:它操作多个堆栈来执行其操作,与寄存器机相比,堆栈机会写入和读取特定存储器位置。其次,Python解释器是一个字节码解释器:它的输入是字节码的指令集。当您编写Python时,词法分析器,解析器和编译器将生成代码对象供解释器进行操作。每个代码对象都包含一组要执行的指令(字节码 )以及解释器需要的其他信息。字节码是Python代码的中间代表:它表示解释器可以理解的源代码形式。