- 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
- 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
- 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
Python源码剖析(RobertChen)
第 1 页 共 13 页
Python 源码剖析
本文作者: Robert Chen (search.pythoner@ )
制作:Chen Ningjun 080927
——Small Python
1. Small Python
在详细考察了 Python 中最常用的几个对象之后,我们现在完全可以利用这些
对象做出一个最简单的 Python 。这一章的目的就是模拟出一个最简单的Python
——Small Python。
在 Small Python 中,我们首先需要实现之前已经分析过的那些对象,比如
PyIntObject ,与 CPython 不同的是,我们并没有实现象 CPython 那样复杂的机制,
作为一个模拟程序,我们只实现了简单的功能,也没有引入对象缓冲池的机制。
这一切都是为了简洁而清晰地展示出 Python 运行时的脉络。
在 Small Python 中,实际上还需要实现Python 的运行时环境,Python 的运行
时环境是我们在以后的章节中将要剖析的重点。在这里只是展示了其核心的思想
——利用 PyDictObject 对象来维护变量名到变量值的映射。
当然,在CPython 中,还有许多其他的主题,比如Python 源代码的编译,Python
字节码的生成和执行等等,在 Small Python 中,我们都不会涉及,因为到目前为
止,我们没有任何资本做出如此逼真的模拟。不过当我们完成这本书的探索之后,
就完全有能力实现一个真正的 Python 了。
在 Small Python 中,我们仅仅实现了PyIntObject ,PyStringObject 以及
PyDictObject 对象,仅仅实现了加法运算和输出操作。同时编译的过程也被简化
到了极致,因此我们的 Small Python 只能处理非常受限的表达式。虽然很简陋,
但从中可以看到 Python 的骨架,同时,这也是我们深入Python 解释器和运行时
的起点。
2. 对象机制
在 Small Python 中,对象机制与CPython 完全相同:
[PyObject]
#define PyObject_HEAD \
int refCount;\
struct tagPyTypeObject *type
#define PyObject_HEAD_INIT(typePtr)\
0, typePtr
第 1 页 共 13 页
第 2 页 共 13 页
typedef struct tagPyObject
{
PyObject_HEAD;
}PyObject;
但是对于类型对象,我们进行了大规模的删减。最终在类型对象中,只定义
了加法操作,Hash 操作以及输出操作:
[PyTypeObject]
//definition of PyTypeObject
typedef void (*PrintFun)(PyObject* object);
typedef PyObject* (*AddFun)(PyObject* left, PyObject* right);
typedef long (*HashFun)(PyObject* object);
typedef struct tagPyTypeObject
{
PyObject_HEAD;
char* name;
PrintFun print;
AddFun add;
HashFun hash;
}PyTypeObject;
PyIntObject 的实现与CPython 几乎是一样的,不过没有复杂的对象缓冲机制:
[PyIntObject]
typedef struct tagPyIntObject
{
PyObject_HEAD;
int value;
}PyIntObject;
第 2 页
文档评论(0)