>>>PyPathPython 学习站
前沿与实践 · Frontier & Practice lv.4 前沿 kp-039

新版本特性(3.12/3.13 及 free-threading)

前置知识:kp-029、kp-026

1. 一句话定义

Python 3.12(2023-10)以语法放开与性能打底,3.13(2024-10)引入实验性 JIT 与free-threading 构建(PEP 703 去 GIL),2025 年代的 3.14 持续推进——本篇是"语言还在快速进化"的证据清单。

2. 为什么重要

写新代码时应知道哪些语法可用(f-string 嵌套、泛型语法),读生态新闻时应知道 JIT/free-threading 处于什么成熟度——避免"听说 Python 不再维护/永远有 GIL"两类过时叙事。

3. 前置知识

kp-026(类型注解)、kp-029(GIL)。

4. 核心概念(按版本)

3.11(2022-10)——性能大版本:

  • CPython 解释器提速 10-60%(Faster CPython 项目第一期)。
  • 精细化 traceback:错误位置用 ^^^ 箭头指出确切列。
  • ExceptionGroup / except*、Self 类型、tomllib 进标准库。

3.12(2023-10)——语法与工具:

  • PEP 701:f-string 语法全面放开(可嵌套同种引号、多行、注释)。
  • PEP 695:泛型新语法 def f[T](x: T) -> T、class Box[T]:(详见 kp-040)。
  • 每个子解释器独立 GIL(PEP 684,为 free-threading 铺路)。
  • perf profiler 支持(低开销生产剖析)。

3.13(2024-10)——运行时革新:

  • 实验性 JIT(PEP 744):复制与粘贴式编译,默认关闭(构建选项 --enable-experimental-jit)。
  • free-threading 构建(PEP 703):--disable-gil 独立构建,官方可下载(python.org 标注 free-threading 版),生态适配进行中。
  • 交互式解释器(REPL)全新升级:多行编辑、彩色提示、F2 历史浏览。
  • 实验性 no-GIL 之外的改进:dbm.sqlite3 默认后端、移除 2to3 等死模块("清理"主题贯穿 3.13/3.14)。

3.14(2025-10,按节奏):free-threading 进入官方支持阶段第一阶段(PEP 779)、模板字符串 t-string(PEP 750)等。具体清单以官方 What's New 为准。

5. 原理与机制

text
三条性能/并发路线的现状(学习时的心智坐标系):
  ① 单线程提速:3.11 specializing interpreter(已落地,白拿)
  ② JIT:3.13 实验开启,默认关闭;适合长跑型纯 Python 代码
  ③ free-threading:单独构建、单线程开销 ~5-10%、多线程真并行;
     生态(C 扩展)逐步适配,生产采用仍需按库评估
结论:2025 年代选型默认仍是 GIL 构建 + 多进程/asyncio;
     free-threading 作为"值得持续关注的第二选项"

6. 关键事实(模型/图示)

text
升级决策树:
  修 bug 安全补丁(3.12.x → 3.12.y)→ 随时可升
  跨小版本(3.11 → 3.12/3.13)→ 看依赖矩阵(关键库是否声明支持)
  上 free-threading/JIT → 仅实验项目;等待生态成熟度报告

7. 直观类比

CPython 的演进像一座仍在装修的图书馆:3.11 把楼梯修宽(提速),3.12 改了借书流程(语法),3.13 正在试装"自动分拣机器人"(JIT)和"撤掉单通道闸机"(去 GIL)——机器人还没全馆启用(默认关闭),闸机撤了书报遗失率(线程安全)需要各书库(生态库)自查。

8. 实例与案例

python
# 3.12 f-string 放开(3.11 及之前这是 SyntaxError)
f"{'inner':>10} with {f'{nested}!'}"
rows = [f"{col!r:>{width}}" for width in (5, 10)]

# 3.13 REPL 新体验
# >>> 直接粘贴多行代码、错误高亮、按 F2 翻历史

9. 常见误区

  1. "JIT 让 Python 速度翻倍" —— 3.13 JIT 尚实验、默认关闭;当前最大白拿收益仍是 3.11 的解释器提速。
  2. "3.13 起 Python 没有 GIL 了" —— 是另一个构建;默认构建照旧有 GIL。
  3. 版本追新不看依赖 —— 很多关键库(numpy/pandas/torch)的新版支持有滞后矩阵;生产跟随 LTS 式节奏。
  4. 以旧教程判断语言现状 —— 检索资料时认准 docs.python.org 对应版本的 What's New。

10. 自测题

  1. free-threading 构建与默认构建的关系?
  2. 3.11 的性能提升来自哪一层改动(对用户是"免费的"吗)?
  3. 生产环境升级大版本的决策要点?
参考答案
  1. 并行分支:python.org 同版本提供 gil 与 free-threading 两种构建;默认生态以 gil 构建为主,free-threading 处于生态适配期。
  2. specializing interpreter 对字节码做快速特化路径;完全免费——无需改代码,升级即提速。
  3. 依赖兼容矩阵 → 测试全绿 → 灰度环境 → 观察 profiler 与内存 → 全量。

11. 与其他知识点的关系

  • kp-040 类型前沿:PEP 695 细节。
  • kp-029 GIL:free-threading 是它的续集。
  • kp-046 社区与历史:版本演进的治理背景。

12. 延伸阅读

  • What's New in Python(每版必读):https://docs.python.org/zh-cn/3/whatsnew/
  • PEP 703 / PEP 744(JIT)