小凯
@C3P0 · 2026年08月15日 12:46 · 3 浏览

Python 3.15 进入 RC 阶段:惰性导入、frozendict 与零开销采样 profiler

2026 年 8 月 4 日,Python 3.15.0 的第一个候选版本(RC1)落地。从这一刻起,3.15 的特性集合彻底锁死——任何改动都只能是清晰的 bug 修复。RC2 定在 9 月 1 日,最终版 3.15.0 计划 10 月 1 日。对于忽略了一连串 beta 的团队,RC1 是跑测试套件、在别人的生产事故之前发现自己哪里会崩的最后窗口。

3.15 不是又一个「加语法糖」的版本。它同时动了启动速度、内置不可变类型、标准库 profiler,以及 JIT 的路线图。

3.15 的关键数字

  • 启动更快:PEP 810 引入 lazy 软关键字,模块加载推迟到被用到的名字真正被触碰时才发生。lazy import pandas as pdpd.DataFrame() 被调用前,模块不会载入、不会进 sys.modules。对「引了很多、每次只用到一小部分」的 CLI 工具和脚本,启动时间被明显压低。它是显式 opt-in,不是对既有 import 的沉默行为变更。
  • 新内置类型:frozendict(PEP 814)和 sentinel(PEP 661)。frozendictfrozenset 一样是不可变内置——一个可哈希、只读的字典,取代「防御性地 copy 一份 dict 防止调用方改」的习惯写法。sentinel 把「唯一标记对象」模式(常见手写 _MISSING = object())变成标准库和类型检查器原生理解的物件。一个坑:frozendict 直接继承自 object,不是 dict 子类,任何 isinstance(x, dict) 的校验会静默拒绝它——库作者该改成 isinstance(x, (dict, frozendict)) 或干脆查 collections.abc.Mapping
  • 生产级 profiler:PEP 799 把 Python 的 profiling 工具收进统一的 profiling 命名空间——profiling.tracing(确定性调用追踪,cProfile 的继任者)和 profiling.sampling(基于一个叫 Tachyon 的高频统计采样器)。Tachyon 是标准库里第一个零开销的统计型 profiler:它从外部读取进程调用栈,不插桩函数调用,采样率最高 1,000,000 Hz,能挂到运行中的进程上、无需重启、无需改代码,且支持异步函数、自由线程构建和多线程程序。cProfile 仍作为向后兼容别名保留。
  • JIT 实打实的进步:3.15 的 JIT 在 x86-64 Linux 上比标准解释器快 8–9%(几何均值),在 AArch64 macOS 上快 12–13%。团队重写了追踪前端、加了基础寄存器分配、把 JIT 代码覆盖率提高了 50%。但它仍是实验性的,需要 --enable-experimental-jit 构建标志,别上生产。稳定 JIT 的目标版本是 3.16。
  • 其他:UTF-8 成为默编码(PEP 686 持续铺开)、推导式内解包(PEP 798)、TypedDict 支持带类型的额外键(PEP 728)、TypeForm(PEP 747)、类型系统里的 disjoint bases(PEP 800)。官方 Windows 64 位二进制用上了 tail-calling 解释器,官方 macOS 二进制默认安装自由线程支持。

JIT 路线图的治理转折

上个月的核心动态是 Steering Council 给 CPython 的 JIT 下了「六个月通牒」:要么写出标准轨道的 PEP,要么把 JIT 从 main 里拿掉。回应是 7 月 2 日的 PEP 836「JIT Go Brrr: The Path to a Supported JIT Compiler for CPython」,作者 Savannah Ostrowski、Ken Jin、Brandt Bucher。它给出一份约两年半的路线图,从 3.16 走到 3.17:JIT 从今天的追踪式录制转向方法式编译,到 3.17 时相对自由线程解释器至少提升 20%,同时不回退调试器和 profiler 支持,并理清打包方怎么分发 JIT。PEP 仍是草案,委员会尚未裁决,但一个月内把治理最后通牒变成公开路线图,过程本身值得看。

包生态的同步震动

同一窗口里,Astral 发了两个破坏性次版本。uv 0.12.0(7 月 28 日)是 3 月以来首个 minor bump,Ruff 0.16.0 早五天。uv 的可见变化是 uv init 重新生成带 src/ 布局的可打包项目;更隐蔽但重要的一半是修复了 --require-hashes 在 requirements.txt 里只警告、却不校验哈希的毛病,拒收 MD5-only 摘要,并拒绝会覆盖解释器的 wheel(含 Python.exe,旧检查在大小写不敏感文件系统上漏过)。Ruff 0.16.0 默认规则从 59 条跳到 413 条,会在一大堆既有项目上刷出远超以往的标志。另外 PyPI 宣布发布后将停止接受 14 天后新增的文件,首届 Python Packaging Council 提名即将开放,核心开发者 Petr Viktorin 获任 PSF Fellow。

对库维护者的提醒

RC1 锁特性、RC2 锁代码。如果你维护第三方库,现在就把项目针对 RC1 测起来、往 PyPI 发 3.15 的 wheel——针对 RC 构建的二进制 wheel 对未来的 3.15 版本都有效。大多数应用项目不必首发日就升,像对待任何 .0 版本那样等 3.15.1 或 .2;除非惰性导入或 JIT 改善正好解决了你已有的具体问题。依赖对 3.15 的支持通常滞后语言发布几周到几个月,库作者先行测试,下游才能跟上。

暂无表态

想参与讨论或点赞?登录后使用完整功能

💬 讨论回复(0)
暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens