Python写的Python解释器(一)

编译自: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代码的中间代表:它表示解释器可以理解的源代码形式。

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2018-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

Stack and Heap 堆和栈的区别include

在和计算机内存打交道时,我们一定会碰到堆和栈,这两个东西很容易搞混,那么现在就来梳理一下二者的关系。 栈(Stack)是用来静态分配内存的而堆是动态分配内存的,...

28680
来自专栏信安之路

php 反序列漏洞初识

在 OWASP TOP10 中,反序列化已经榜上有名,但是究竟什么是反序列化,我觉得应该进下心来好好思考下。我觉得学习的时候,所有的问题都应该问 3 个问题:w...

29100
来自专栏Java后端技术

通俗易懂详解Java代理及代码实战

代理模式是Java常用的设计模式之一,实现代理模式要求代理类和委托类(被代理的类)具有相同的方法(提供相同的服务),代理类对象自身并不实现真正的核心逻辑,而是...

14210
来自专栏web前端教室

JavaScript ES6 模板字符串

偶然发现这个新东西,ES6也有模板了,是使用反引号`,来表示的。 这个新东西被称为字符串字面量,就是模板字符串。它使JS也有了简单的字符串插值特性。 为什么说是...

31290
来自专栏PHP在线

PHP底层的运行机制与原理

PHP说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。 PHP是一种适用于web开发的动态语言。具体点说,就是一个用C语言实...

1.4K60
来自专栏Python专栏

Python | 19个优雅的Python编程技巧

http://lovesoo.org/pythonic-python-programming.html

35330
来自专栏Aloys的开发之路

C/C++中的abort、atexit、exit和_Exit

     这几个函数都在头文件#include <stdlib.h>中声明。exit、_Exit与abort函数使程序终止,控制并不返回到这些函数的调用者。 e...

25490
来自专栏编程

Go中defer的5 个坑-第一部分

首发于:https://studygolang.com/articles/12061 Go 中 defer 的 5 个坑 - 第一部分 通过本节的学习以避免掉入...

26750
来自专栏企鹅号快讯

PHP中被忽略的性能优化利器:生成器

如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生。但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP5.5.0才引入的功能,也...

399140
来自专栏从流域到海域

堆和栈的区别

堆(heap)和栈(stack) 在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(...

23270

扫码关注云+社区

领取腾讯云代金券