Python源码剖析(Robert+Chen).pdfVIP

  1. 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
  2. 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
  3. 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)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档