内容提要
2026年Python语言峰会上,David Hewitt代表Rust for CPython项目团队介绍进展:团队约60人,计划在Python 3.16为zlib模块提供基于zlib-rs的可选Rust实现以加速pip安装,后续扩展至io、json等模块,最早2029年Python 3.18才要求必须用Rust构建。成功标准包括多数核心开发者接受、性能不下降、支持所有平台,并讨论了依赖管理、API设计及C与Rust并存等问题。
延伸解读
为何选择 Rust:从崩溃报告到工程效率
文章指出,CPython 中标记为“type-crash”的问题数量持续上升,这与新解析器、JIT 和自由线程等大型技术押注有关。Rust 被视为潜在解决方案,因为 Android 采用 Rust 后实现了“更快行动、更快修复”,且相同大小的补丁所需修订次数更少。团队强调,许多科技公司是将 Rust 作为长期赌注,而非一时兴起。
分阶段路线图:从可选到必需
根据提案,Rust 代码最早在 Python 3.16(2027 年 10 月)以完全可选形式出现,首个模块是 zlib,使用 zlib-rs 实现,同时保留 C 代码作为回退。Python 3.17(2028 年 10 月)将解决平台问题并扩展到 io、json 等模块。Rust 成为构建必需最早要等到 Python 3.18(2029 年),距今至少三年。
成功标准与核心开发者接受度
团队提出的成功标准包括:多数活跃核心开发者愿意使用 Rust API 实现功能、CPython 性能基准无显著下降、所有分层平台均受 Rust 支持、发行版构建体验表明添加 Rust 支持可管理。David 强调第一点是“开放”而非“熟悉”,并计划调查核心开发者使用 Rust 的经验,以决定是否将 Rust 移出实验阶段。
依赖管理与社区顾虑
Pablo Galindo Salgado 担心从 Cargo 引入依赖会成为“拦路虎”,因为 CPython 目前严格挑选并内置依赖,每次漏洞披露都需发布新版本。David 回应将尽量减少外部依赖,zlib-rs 是唯一依赖,且 Rust 源码会被内置,构建 CPython 无需 Cargo。此外,Larry Hastings 表示不太愿意为 CPython 学习 Rust,David 保证 CPython 不会为 Rust 而 Rust,将长期是双语言项目。
Q&A
Rust for CPython 项目计划在哪个 Python 版本中首次引入可选的 Rust 实现?
计划在 Python 3.16(2027 年 10 月)中首次引入可选的 Rust 实现,首先针对 zlib 模块,且保留现有 C 代码作为回退。
为什么选择 zlib 模块作为第一个用 Rust 实现的模块?
因为 zlib 模块范围小但影响大:zlib 压缩算法被 Python 打包广泛使用,几乎每个 pip install 都会因此加速;同时它需要外部 Cargo 包,可以借此设计和测试构建流程。
Rust for CPython 项目提出的成功标准有哪些?
成功标准包括:多数活跃核心开发者愿意使用 Rust API 实现功能;CPython 性能基准没有明显下降;所有 tiered 平台都得到 Rust 支持;发行版构建 CPython 的体验表明添加 Rust 支持是可管理的。
采用 Rust 后,CPython 的依赖管理问题如何解决?
团队计划尽可能少地引入外部依赖,例如 zlib-rs 是唯一依赖;Rust 源码将被 vendor,使得构建 CPython 不需要 Cargo;vendor 的源码不会放在 CPython 代码树中,而是单独存放。
Rust 在 CPython 中最终会成为必需的吗?
是的,根据路线图,最早在 Python 3.18(2029 年)Rust 将成为构建 CPython 的必需部分,并发布公共 Rust API。但在此之前,Rust 将长期是可选的,CPython 会是一个双语言项目。
核心开发者对 Rust for CPython 项目有哪些主要担忧?
主要担忧包括:Rust 知识在核心开发者中不普及;从 Cargo 获取依赖可能带来问题,尤其是安全漏洞和发布管理负担;以及 Rust 代码本身仍可能存在正确性问题。团队通过增量移植、vendor 依赖和采用属性测试、模糊测试等方式缓解。