Python源码阅读前言

欲穷千里目,更上一层楼。 Posted by hstk30 on July 1, 2021

用c 思考,用Python 实现。

其实在大四的时候就有幸看到 《Python源码剖析》 这本书,在实习的时候午睡前还会看一会儿再睡, 写的实在是好,使得我的c 语言能力也大有长进。最近有空再复习一下, 会更新一些Python源码相关的文章,主要讲Python 内建对象:int, string, list, dict的实现, 内存管理机制,可能会讲多线程机制。

Python源码阅读前言

参考的Python 源码版本是 Python 2.5.1

它的目录组织结构如下:

目录 描述
Include c语言头文件,可以找到所有Py{type}Object 对象的定义和相应方法的声明
Object 对应Py{type}Object 对象方法的实现,并初始化相应的Py{type}_Type类型
Python Python 解释器的Compiler 和执行引擎(ceval.c)部分,是Python 运行的核心
Modules 用c语言实现的底层库
Lib Python 实现的标准库
Parser Python解释器词法分析和语法分析

其他的目录我也说不清楚到底是干嘛的,就不写了。。。

当然,如果是要看Python 的底层实现,我觉得看Include, Object, Python 目录下的文件就行了。

img

上面的图就是Python 的总体架构,我们可以把代码阅读的关注点放在 Compiler 后的事情, Compiler 就相当于使用Python的 dis库 将我们写的Python 代码转换成了指令集合–Python 字节码(byte code), 然后这些字节码会进入 Code Evauator 中,也就是Python/ceval.c 中的一个2000 多行的函数。 这个函数就叫做Python 的虚拟机,其实就是一个for 无限循环加上switch: case:,处理定义的所有字节码操作。(嗯,并不是什么魔法嘛)

参考

《Python源码剖析》 : 强烈推荐
CPython internals