Open
Description
背景
SOT 新版本适配时间到~又到了一年一度的 Python 新版本适配时间(虽然实际上是两年好几度),如今 Python 3.13 已经发布,我们自然也是需要对 Python 3.13 进行适配了。
SOT 版本适配的相关背景已经在 #61173 中有所提及,这里就不再赘述一遍了。
不过值得注意的一点是,根据现在对于 EvalFrame 的适配工作难度来看,Python 3.13 的适配难度比预想的要低一些,大概和 Python 3.12 相当。因为 Python 3.13 中的 JIT、free-threading 都还是实验性功能,SOT 整体适配工作量不大。free-threading 作为单独的可执行文件,会作为额外专项进行适配,而且目前来看,对 SOT 影响不大,真正有影响的是框架其它 pybind 层的 API 变动(需要保证线程安全,避免数据竞争)。
Eval Frame 适配
- eval frame 基本结构适配 [SOT][3.13]
eval_frame
support python 3.13 #69126 - 使用
GetLocals
获取f_locals
[SOT][3.13] UseGetLocals
to avoidSystemError
when get locals from proxy frame #69131
字节码适配
字节码适配任务即对新版本新增、修改的字节码进行适配,根据 Python 3.13 字节码变更 和 Python 各版本字节码差异表格,变动和新增字节码如下:
行为变动
序号 | 字节码名称 | 认领人 | PR |
---|---|---|---|
1 | RESUME | ||
2 | MAKE_FUNCTION | @GoldenStain | #69567 |
新增
序号 | 字节码名称 | 认领人 | PR |
---|---|---|---|
1 | TO_BOOL | @GoldenStain | #69567 |
2 | CALL_KW | @SigureMo | #69431 |
3 | SET_FUNCTION_ATTRIBUTE | @GoldenStain | #69567 |
4 | CONVERT_VALUE | @GoldenStain | #69401 |
5 | FORMAT_SIMPLE | @GoldenStain | #69346 |
6 | FORMAT_WITH_SPEC | @GoldenStain | #69401 |
其它模块适配
TODO...
单测汇总见 #69246