Python 3.11 将于 2022 年 10 月发布,Python 的作者 Guido Van Rossum(龟叔) 计划将 Python 的速度提高两倍,他未来四年的总体目标是将 Python 的速度提高五倍。
虽然 Python 是使用最广泛的计算机语言之一,但它更常用于数据分析等特定活动,而不是实际的交易软件。这是由于 Python 的抽象水平更高,这使得它作为解释语言的速度比 C++ 或 Java 等编译型语言慢。
想改变这一点。Van Rossum 在上一次 Python 语言峰会上表示,当 3.11 版本于 2022 年 10 月发布时,他计划将 Python 的速度提高两倍。
Van Rossum 的演示文稿[1]可在 Github 上找到,详细介绍了他计划如何做到这一点,为了方便你了解这一计划,我把文稿内容翻译如下:
香农计划
- 参与该计划 - github.com/markshannon/faster-cpython[2]
- 基于 “HotPy、HotPy2” 的经验
- 未来四年将 Python 的速度提升 5 倍,每年 1.5 倍
- 寻找基金会
感谢 Python
- 当我(Guido Van Rossum,下同)退休在家时我感到无聊
- 我向微软申请了职位,被雇用了
- 微软给了我充分的自由来发起项目
- 我选择回归本源
- 这就是微软回馈 Python 的方式
开放讨论、开源
- 已经组建了小团队(Eric Snow, Mark Shannon, Guido, 可能会扩大)
- 与核心开发人员完全开放的协作
- 保持 CPython 的增量更改
- 没有长期存在的分叉/分支,6,000 行 PR 不足为奇
- 我们也会负责维护和支持
- 一切都是开源的
- 开放所有具体项目的仓库
- 开放 GitHub 仓库上的所有讨论
限制
- 不破坏稳定的 ABI(应用程序二进制接口) 兼容性
- 不破坏有限的 API 兼容性
- 不打破或降低极端情况的运行速度
- 例如,在堆栈上 push 1,000,000 个元素
- 保持代码可维护
- 这很难!
我们能做什么,不能做什么
- 不更改基础对象,类型布局
- 可以改变字节码、栈帧布局
- 可以改变编译器、解释器
- 可以改变大多数对象的内部实现
3.11 如何提升 2 倍
- 自适应的、专门的字节码解释器
- 各种其他单独的优化
- 例如,优化帧堆栈,更快的调用,调整分配
- “零开销”的异常处理
- 我们还不确定我们一定会达到 2 倍!
其他我们可以做的
- 提示启动时间
- 更改 pyc 文件格式
- 更快的整数
- 将 __dict__ 置于固定偏移量 (-1?)
- "隐藏的类"
- 标记号码(但... ABI 问题)
3.11 后的计划
- 取决于我们管理 3.11 的内容
- 5 倍加速,我们必须要有创意
- 我们的未来会有机器码生成
- 可能发展稳定的ABI/有限的API
谁受益比较大
- 运行 CPU 密集型纯 Python 代码的用户
- 使用 Python 构建网站的用户
- 碰巧使用 Python 工具的用户
谁受益不大
- 已经用 C 语言编写的代码
- numpy、tenserflow 等
- I/O 密集型任务
- 多线程代码
- 算法效率低下的代码
我们的东西在哪
- PEP 659:专业自适应的编译器
- repos:
- 分析、基准测试等工具
- 讨论跟踪
- cpython 的 fork,用于暂存分支
- github.com/faster-cpython/cpython
- github.com/faster-cpython/ideas
- github.com/faster-cpython/tools
最后
总结一下,也就是自适应字节码解释器、帧堆栈优化、“零开销”异常处理,这些可能会让 Python 的速度翻一番,未来的更改可能包括坚实的 ABI(应用程序二进制接口)或机器代码生成,以进一步提高 Python 的性能。
相信龟叔,让我们拭目期待吧。
参考资料
[1]
文稿: https://github.com/faster-cpython/ideas/blob/main/FasterCPythonDark.pdf
[2]
github.com/markshannon/faster-cpython: https://github.com/markshannon/faster-cpython