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