文档章节

Python 1.5.2 vs 1.0.1 头文件部分变更比较

刘军兴
 刘军兴
发布于 2016/01/12 10:53
字数 922
阅读 41
收藏 1

Python 1.5.2 vs 1.0.1  (新 vs. 旧)

如同以前, 通过文件比较工具, 查看两个版本之间的差异.

Added Python.h:
   Include nearly all Python header files
   这样外面一般只需要包含此文件, 就能编写模块了.
  
Added abstract.h:
   Abstract Object Interface (many thanks to Jim Fulton)
   PROPOSAL: A Generic Python Object Interface for Python C Modules
   抽象对象接口/一般 python 对象接口.
   此文件很重要, 有大量的注释说明值得细看.
  
Deleted accessobject.h
Deleted allobjects.h  (新的 python.h 等价于该文件)
Deleted assert.h

bitset.h: 名字略微变动, 无本质变化.
Deleted bltinmodule.h
Added bufferobject.h :  Buffer object interface
   提供 PyBuffer_xxx 对象接口.

Added cStringIO.h : provides access to cStringIO objects from C.

ceval.h: 一般名字都改为 PyXXX, 包围以 DL_IMPORT(), Py_PROTO() 等宏.
  如 PyEval_xxx, Py_FlushLine, PyObject 等.
 
Deleted cgensupport.h

classobject.h : 名字改为 PyXXX

Added cobject.h : C objects to be exported from one extension module to another.
   用于在模块之间传递数据, 可看做是 void*.
   extern PyTypeObject PyCObject_Type.

compile.h : Definitions for bytecode
   改名为 PyCodeObject, 改用 lineno-table 机制.

Added complexobject.h : Complex number
   复数对象 PyComplexObject.

dictobject.h : 改名为 PyDictObject, 提供一组访问接口如 PyDict_Keys()

errcode.h : 新增一个, 无本质变化.

Deleted errors.h (可能改为 pyerrors.h )

eval.h : Interface to execute compiled code
   即接口函数 PyEval_EvalCode()

fileobject.h : PyFile_xxx

floatobject.h : PyFloatObject -- 浮点数对象.

frameobject.h : PyFrameObject -- 结构有一些调整, 引用含 PyThreadState, PyTryBlock 对象

funcobject.h : PyFunctionObject

grammar.h : 部分改名为 PyGrammar_XXX

import.h : PyImport_XXX; 对 inittab() 提供了接口.

intobject.h : PyIntObject.

intrcheck.h : PyOS_InterruptXXX() 中断检查, 如按下 Ctrl+C.

listobject.h : PyListObject .

longintrepr.h : long integer representation.
   多精度整数结构 PyLong_XXX.
longobject.h : PyLongObject .

Deleted mappingobject.h : 合并在 dictobject.h 中了.

marshal.h : PyMarshal_WriteXXX, _ReadXXX 读写接口.

metagrammar.h : 无本质变化.

methodobject.h : Method object interface
   改进为 PyCFunctionObject, PyMethodDef, PyMethodChain.

modsupport.h : Module support interface
   PyArg_Parse, _Bind :  参数解析/绑定估计改进了.
   Py_InitModule1,2,3,4 ...
  
moduleobject.h : Module object interface
   PyModule_XXX

mymalloc.h : 提供了一组 PyMem_xxx 宏/函数.
   一组包装的 Py_Malloc, _Realloc, _Free() 等.

Added mymath.h : 略, 与平台兼容有关.

myproto.h : 定义 Py_PROTO()

myselect.h : 与平台兼容有关, socket 相关.

mytime.h : 与平台兼容有关, time.h 相关.

node.h : Parse tree node interface
   解析树结构. PyNode_XXX.
  
object.h :
   PyObject, PyVarObject 结构确定.
   PyNumberMethods, PySequenceMethods, PyMappingMethods, PyBufferProcs 结构
   新增 tp_call, tp_str, tp_getattro, tp_setattro tp_as_buffer, tp_flags, tp_doc 等.
  
objimpl.h: PyObject_XXX 实现.

opcode.h : 增删了几个指令. CALL 统一为 CALL_FUNCTION.
    所以指令序号不连续了, 产生了空洞.

osdefs.h : 操作系统相关的一些定义.

parsetok.h : PyParser_XXX 无本质变化.

Added patchlevel.h : Newfangled version identification scheme.

pgenheaders.h : _Py_xxx 可能表示 python 内部使用的.

Added pydebug.h : 定义了一组 Py_DebugFlag .

Added pyerrors.h : 可能原来名为 errors.h
  PyErr_Set, _Clear, _Fetch 等. 异常处理相关定义.
  含一组预定义的异常, 如 PyExc_IOError 等.
 
Added pyfpe.h :  Define macros for handling SIGFPE.
   (可能用于浮点异常处理)

Added pystate.h : Thread and interpreter state structures and their interfaces
   PyInterpreterState (相当于进程) , PyThreadState (相当于线程)
   这样需了解如何实现多线程处理的.

pythonrun.h : Interfaces to parse and execute pieces of python code
   Py_Init, _Parse, _Run, _Exit 等接口.

Added pythread.h :
   定义 PyThread_XXX, 锁机制等.

rangeobject.h : Range object interface
   PyRangeObject .

rename1.h 改为 rename2.h :
   大量 python 原名字通过宏方式改名为新的 PyXXX 名字形式.
  
Added sliceobject.h : The unique ellipsis object "..."
   PySliceObject
 
stringobject.h : PyStringObject.

structmember.h : Interface to map C struct members to Python object...
   新增了几种支持的 C 数据类型(如 T_STRING_INPLACE)
   PyMember_Get, _Set

sysmodule.h : System module interface
   PySys_XXX

thread.h : PyThread_XXX, 实际实现在 pystate.h 中.

token.h : 无本质变化. (添加了数学 ** POW 运算符支持).

Deleted tokenizer.h : 可能移到 Parser 里面了.

traceback.h : 改名 PyTraceBack_XXX. 成为一个对象, 外面可访问.

tupleobject.h : PyTupleObject .


=================================================================
改动小结:
1. 名字变更为 PyXXX.
2. 新增了几种对象, 如 complex, slice 等.
3. 新增 TypeObject 中几个方法接口, callable, 魔法方法, 对象方法抽象接口.
4. Process/Thread 支持, 锁机制.
5. 异常处理增强/改进.

这些实现已经和最新版本接近了. 以后(这几天)有空再细节看一些.

© 著作权归作者所有

共有 人打赏支持
刘军兴
粉丝 57
博文 189
码字总数 231687
作品 0
昌平
私信 提问
Python 源码的考古(四) 1.0.1 版

1.0.1 版的 README 文件提到这是对正式发布的 Python 1.0 的补丁, 主要解决可移植性问题. 大致变化 我看和 0.9.1 版差别, 首先是目录结构整理了一下, 以前是所有源文件都混在一个 src 目录下...

刘军兴
2016/01/04
56
0
使用Shiboken为C++和Qt库创建Python绑定

Shiboken的资料真少,仅仅为了写一个小小的demo就大费周折。但不管怎样,经过几个月断断续续的了解,总算可以为纯C++的库和Qt的库创建python的绑定了。 本文前提: 熟悉cmake,能够用cmake构...

晨曦之光
2012/05/08
409
0
使用MetaSIP自动生成SIP封装C++到Python接口

利用SIP将C++封装为Python,SIP采用手动书写,但对于比较庞大的工程手动书写sip文件就显得很苍白无力。QT利用MetaSIP这款工具生成sip文件,然后手动修改部分SIP文件,然后利用python书写 co...

openthings
2015/06/24
0
1
jug 1.0.1 发布,Python 并行处理框架

jug 1.0.1 发布,此版本修复了 Python 3(Python 2.x 不影响)中文件后端的问题。 Jug 是一个基于任务的并行处理框架,采用 Python 编写,可用来在不同的机器上运行同一个任务,使用 NFS 做文...

oschina
2014/06/17
802
1
0. Python3源码—编译

0.1. 整体架构 在最高的层次上,Python的整体架构可以分为三个主要的部分: 左:Python提供的大量的模块、库以及用户自定义的模块; 右:Python的运行时环境,包括对象/类型系统(Object/Ty...

whj0709
06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

局域网共享文件读写的实现方式

首先是设置共享目录,支持用户和密码等权限控制 然后我们可以使用Windows资源管理器操作共享目录下的文件 这中间隐藏了资源管理器帮我们建立目录映射和连接的过程,如果设置了用户名和密码,...

夏至如沫
18分钟前
2
0
Elasticsearch安装与配置

一、Docker安装ES 开发模式 可以使用以下命令快速启动Elasticsearch以进行开发或测试: $ docker run -p 9200:9200 -p 9300:9300 -d --name es -e "discovery.type=single-node" docker.ela...

吴伟祥
25分钟前
1
0
移动页面滚动穿透解决方案(荐)

移动页面滚动穿透解决方法目前有多种解决方案,我介绍下几种方案: 解决方案1:阻止冒泡。 //关键代码$(".sliders,.modals").on("touchmove",function(event){    event.preventDefau...

壹峰
25分钟前
0
0
调用infura实现java项目调用智能合约

https://infura.io/dashboard 注册一个帐号 添加一个project 可选择主网或者其他网络,然后复制地址放进pom.xml中 复制智能合约地址复制到pom.xml中 复制任意一个帐号的private key到pom.xml...

八戒八戒八戒
32分钟前
3
0
vue+koa2+token 登录验证

https://segmentfault.com/a/1190000017379244?utm_source=weekly&utm_medium=email&utm_campaign=email_weekly...

Js_Mei
35分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部