Python 3.14已经正式发布。这个版本带来三个重磅变化:实验性JIT编译器首次合入主线、free-threaded无GIL构建从实验状态转为官方支持、CPython内部模块开始用Rust重写。PSF(Python软件基金会)联合微软Faster CPython团队、Meta和Google一起投入了过去5年里最高的人力预算,目标只有一个——让Python跑得更快。
JIT编译器:从3.13的3%提升到3.15的真正可用
Python 3.13在2024年第一次合入了实验性JIT,技术路线是Brandt Bucher提出的copy-and-patch方案。核心思路是预编译一份”模板字节码”,把每个字节码对应到一段编译好的机器码stencil,运行时把stencil拼起来并把立即数patch进去,生成最终机器码。实现复杂度极低,但生成代码的质量也不如经典JIT。
3.13的JIT把几何平均性能提升只压到3-5%。社区反响平平,”还不如PyPy”几乎成了固定吐槽。
3.14做了一个出人意料的决定:把JIT改成默认关闭,暂停部分优化合入。核心团队意识到copy-and-patch缺少关键基础设施,这三件事不补全,JIT永远只能是”图灵完备但不实用”。3.14的暂停是务实的。
3.15 beta 1的What’s New里关于JIT的描述只有寥寥几行,但含金量很高:JIT优化器现在能执行基本的寄存器分配,跳过部分栈操作,直接在CPU寄存器上运算。3.13的JIT里每个操作都要把结果写到内存求值栈,再从栈里读回来,每一步都是寄存器到内存再到寄存器的往返。3.15砍掉了这个往返。
把3.13到3.14再到3.15看作一条曲线:先尝试、退后整理、再以更扎实的姿态推进。工程上这是正确做法。
无GIL模式转正:比JIT更重要的变革
PEP 703在2023年通过,让CPython支持可选关闭GIL的构建模式。3.13第一次有了python3.13t(free-threaded二进制),但被明确标注为”实验”。
3.14把free-threaded构建从实验状态提升为官方支持版本。这意味着它会持续随Python一起发布,不会在没有正式弃用流程的情况下被移除。
为什么这件事比JIT还重要?JIT让Python代码跑快一个常数倍,10-30%的量级。free-threaded让Python代码真正用上现代多核CPU。后者是数量级的、根本性的性能升级。
代价同样巨大。30年的多线程Python代码、几乎所有依赖GIL的隐式线程安全假设、C扩展的引用计数语义,全都要重新审视。
看一段具体代码:
“`python
counter = 0
def worker():
global counter
for _ in range(1000000):
counter += 1
“`
在GIL版本下,这段代码碰巧是线程安全的。free-threaded模式下,counter的最终值不可预测,因为+=不再是原子操作。这种”隐性正确”的代码在实际部署里到处都是。一旦free-threaded成为默认,全都会变成bug。
CPython内部开始用Rust重写
Python Insider 2026年4月发了一篇低调但重要的文章:Rust for CPython Progress Update。_random、_md5、_sha256、_zoneinfo等模块已经开始用Rust重写,Python/ceval.c的核心解释器循环也在工程化替换中。
Python是开源世界最重要的胶水语言之一,它的核心实现语言第一次出现非C选项。这是1989年Guido写下第一行C代码以来的破例。
PyO3(Rust与Python绑定)的进度最好。Rust自身的所有权语义和free-threaded语义天然兼容,这也是为什么Python核心团队同时在推进用更安全的语言重写CPython关键模块。
对开发者的实际影响
现在(2026年下半年):可以在测试环境启用JIT和free-threaded构建,跑基准测试,找出哪些C扩展需要更新。单线程程序在free-threaded构建下通常慢5-10%,值得在两种构建上都测试。
中期(2027年/Python 3.16):JIT和free-threaded会进一步稳定,性能差距缩小。NumPy类C扩展需要重新审计引用计数和缓冲区协议。Cython生成的代码需要Cython自身更新代码生成。
长期(2028年及以后):Python性能基线会上一个台阶。”Python是慢但够用的胶水语言”这个30年的身份认同正在解构。
发行版分裂风险
CPython的多模式组合一旦稳定下来,Linux发行版面对一个新麻烦:到底默认提供哪个版本?python3.15和python3.15t的行为本质不同。如果Ubuntu 26.04默认是free-threaded、RHEL还是GIL,同一段代码在两边的并发行为完全不同。这是Python 30年里第一次出现同一个版本号下行为可能本质不同的局面。
对中国开发者特别要注意:CentOS Stream、Alpine、麒麟、UOS等发行版的Python包是distros团队自己重新打包的。新的构建系统要求会迫使这些发行版升级toolchain,否则就要长期维护fork。这是一笔不小的工程债。
为什么是2026年集中爆发
PSF有了专业的运行时团队,按照V8和HotSpot同等工程严肃度在做事。微软Faster CPython团队的Mark Shannon、Brandt Bucher、Ken Jin等人持续投入。Meta和Google提供资金和工程支持。治理结构、资金、工程方法论一起到位后的必然爆发。
Python正在变成一门它原本设计时不打算成为的语言。Guido 1989年写下第一行代码时,目标是教学和脚本。今天Python是AI训练首选语言、TIOBE和PYPL排名最流行的编程语言、NumPy/PyTorch/Pandas生态的宿主。AI时代的算力需求把这个错配重新撕开了。
Python 3.15的JIT回归、PEP 703的free-threaded、CPython内部模块的工程化替换,三条线本质上回答同一个问题:Python能不能在不丢失生态的前提下把性能提升一个台阶?答案是可以,但需要3年(3.15到3.18)。这3年里,每一个用Python的工程师都需要重新学一些东西。这是一门语言长大的代价。
苏公网安备32010502011527号
发表回复