Python 源码的考古(四) 1.0.1 版

1.0.1 版的 README 文件提到这是对正式发布的 Python 1.0 的补丁, 主要解决可移植性问题.

大致变化

我看和 0.9.1 版差别, 首先是目录结构整理了一下, 以前是所有源文件都混在一个 src 目录下, 现在分为
几个目录, Grammar 放语法文件; Include 是所有头文件; Lib 是 .py 的库(模块); Modules 放 C 写的模块;
Objects 是 python 核心对象 C 文件; Parser 是语法解析器及 pgen 实现; Python 目录下是主程序;
其它一些杂项目录暂时略去(如 Demo, Doc...).

我们用文件比对工具查看一些重要文件的变更, 如 object, type, eval 等部分, 结果大致如下:
H 文件部分:
   1. accessobject.h 新增 (新版, 以后多,少都基于新版比旧版)
   2. allobject.h 添加了几个对象, 如 accessobject, longobject, rangeobject.
   3. classobject.h 终于我们吐槽的 classmemberobject 名字改为 instanceobject 了.
   4. 看了几个头文件比较, 大概每个都加上重复 include 保护, c++ extern "C" 包围.
   5. dictobject.h : 实际实现是 mappingobject, dict 成了宏/别名.
   6. funcobject.h : 结构定义提取到 h 文件中了.
   7. longobject.h : 新增, 支持任意精度的整数(bignum). 这下应不用担心 int+-* 溢出异常了!
   8. mappingobject.h : 新增. 实际实现 dict.
   9. marshal.h : 新增. 看似是读写对象用.
   10. mymalloc.h : 原 malloc.h 改名过来. 应是解决可移植性问题.
   11. myproto.h, myselect.h, mytime.h 新增. 应也是为了可移植性问题.
   12. object.h : 定义了多个函数类型, 扩展了 number_methods 结构;
        扩展了 typeobject 结构, 新增 hash,(调试用 alloc,free) 等函数.
   13. opcode.h : 可能调整/增加了一些指令.
   14. osdefs.h : 操作系统有关的定义单独放此文件中了. 有 mac,dos 等支持.
   15. rangeobject.h : 新增的.
   16. rename1.h : 主要名字已规范化为 PyXxxObject, PyXxx_Type 等. 其它头文件中的暂时未改.
   17. stringobject.h : 提供 CACHE_HASH 编译选项, 以缓存 hash 值在对象中.
   18. structmember.h : 新增了支持的数据类型, 如 char,byte,ubyte,ushort 等.
   19. thread.h : 看起来像 thread, lock, sema(排斥锁?) 支持.
   20. token.h : 新增了几种 token, 可能改进了词法/语法, 新增了词法元素.

Object 目录下文件:
   1. 多出来 accessobject.c 
   2. classobject.c 中终于我们吐槽的 classmemberobject 名字改为 instanceobject 了.
      对象功能有很大增强, 需要仔细查看.
   3. fileobject.c 有变更, 但不太关心. 略去.
   4. floatobject.c : 由于 number_methods 结构扩展, 新增了数个函数. 但似乎没有太大本质变化.
   5. frameobject.c: 提供了 free_list 缓存 frame 对象. (?frame 大小可变, 影响缓存?)
       似乎 frame 内的 stack 被单独申请为一块内存, 并可动态改变大小.
   6. funcobject.c: 没有本质变化. 由于 Type 扩展了 tp_hash 字段, 各对象都力图支持它.
   7. intobject.c : 支持新增的 number_methods 中规定的函数. 还是有溢出...
   8. listobject.c : 无本质变更. 多了几个支持的函数.
   9. longobject.c : 任意精度整数支持. 这是 python 相比其它脚本语言的特色, 值得仔细学习.
   10. mappingobject.c : 新增, 即原来的 dictobject.c
   11. methodobject.c, moduleobject.c : 无本质变化.
   12. object.c : 新增了对象数量调试支持.
       strobject() 中增加了对 instance 对象若给出了 __str__ 魔法方法时的支持. 这可能是各种魔法方法
       的前身?
   13. rangeobjec.c : 新增. range 对象支持 seq 函数集.
   14. stringobject.c : 新增了 formatstring 的支持(类似于 printf).
   15. tupleobject.c : 无本质改变. 有一个奇怪的 resizetuple() 函数, 也许可以忽略.
   16. typeobject.c : 无本质改变.

多精度数学计算是 Python 的特色之一, 做科学计算的一定会喜欢它. 相比较而言, js, php 等脚本
语言是没有这一支持的. 我们将学习一下它的实现. 

你可能感兴趣的:(Python 源码的考古(四) 1.0.1 版)