Python3-源码剖析(二)-指令特化
在上一篇关于 Python3
源码剖析中,剖析 float
的实现主要是阅读的 Python 3.10
的源码,但是在我看到 PEP-659 这篇关于指令特化(Specializing Adaptive Interpreter)的提案时,我就被它吸引了,因为这就是我之前想给 Lua
提速加的功能之一,冲着对它的热情,我决定将阅读的 CPython
版本提升到 3.11
,这一篇就来剖析一下指令特化的实现,我们将通过两个对象做加法进行分析。
对象相加
首先通过 Python
自带的 dis
工具进行分析,分析两个对象相加的流程。
1 | from dis import * |
可以看到两个对象相乘的指令码为 BINARY_OP
,我们跟踪到 CPython
中,可以确定会调用到 PyNumber_Add
函数中。
1 | static const binaryfunc binary_ops[] = { |
PyNumber_Add
实现也很简单,先看看这两个对象支不支持该二元运算符,不支持,则看看支不支持 concat
操作。