Python 发展史:众人的语言(第三卷)

第 3 卷:Python 发展史(第三卷),介绍了 Python 语言的多实现、数据与 AI、供应链、并行新常态等专题。

卷三:专题群像(多实现·数据与 AI·供应链·并行新常态)

不再按年份,而按“线”来讲:像把一座城分解成四条地铁——你可以在任意一站换乘,但每条线都有自己的节奏。

第一线 多实现的交响:同一门语言的多种体温

1.1 走廊里的圆桌:兼容与速度的对话

大会午后的走廊很像一条不设防的论坛。几位维护者围坐成一圈:

  • CPython 的老工程师说:“兼容与可维护是我们的地基。每一次加速,都要保证把地基加固,而不是在地基上打洞。”
  • PyPy 的同伴笑:“JIT 是时间换空间的手艺,需要耐心。热起来之后,很多纯 Python 负载会飞。”
  • MicroPython 的作者摊开手掌:“我这边的世界是几十 KB 的内存,不许任性。”
  • 另一端,Jython、IronPython 与 Graal 的伙伴谈生态桥接:“让 Python 在 JVM/.NET/多语言运行时里说话,和邻居打招呼。”

圆桌没有输赢,只有路线。同一门语言,在不同的热力学条件下有不同的体温

1.2 CPython:事实标准的稳与进

CPython 像一条主航道:

  • 语义与 C-API 的稳定性,是下游生态的生命线;
  • “解释器专用化 + 轻量 JIT + 自由线程(预览)”是近年的新三件套;
  • “per-interpreter”带来新的隔离粒度,既为并行,也为嵌入、插件系统与脚本型扩展开启可能。

1.3 PyPy:把“热路径”点燃

PyPy 的故事是一部“观测—猜测—优化—回退”的连环剧。JIT 的好处常在长寿命、纯 Python 的服务里显形:

  • 运行一阵子后,热点函数被投喂;
  • 算法库、网络层、模板渲染都能受益;
  • 但与 C 扩展的边界则需要CFFI 等桥梁来达成平衡。

1.4 MicroPython / CircuitPython:把 Python 放进手心

教室与工作坊里,小板子的 REPL 像口袋里的篝火:

  • 学生用几行代码点亮 LED,理解“输入—处理—输出”的闭环;
  • 创客在传感器网络里用 Python 写小小的“边缘智能”;
  • 每个字节都要省着用,错误提示也尽量清楚直白——“教育”是功能表的一项,也是美学原则。

1.5 生态的互文:桥梁与边界

多实现共存,像城市的不同交通系统共用一些换乘站:

  • 协议与接口(如缓冲区协议、数组接口、C-API 的稳定子集)是“换乘站”;
  • HPy 与稳定 ABI 之类的路线在讨论中起伏,目标是“把扩展从特定解释器里解耦”;
  • 现实里,总会有“做不到十全十美”的折衷。选择,是工程的一部分

第二线 数据与 AI:彼此塑形的回声

2.1 笔记本上的复调:从数组到图

一个 notebook 里,几行代码把数据从 CSV 读进来,groupby 像把人群按职业排好队,plot 像在白纸上铺一层墨。学生第一次说出那句话:

“原来我可以看懂数据。”

在实验室,另一张 notebook 里,神经网络像搭积木:ModuleParameterforward。梯度像河水,自动地往上游流。

2.2 数组的共同语言:内存与协议

幕后是更讲究的协作:

  • 数组 API 的趋同让不同库的张量在用户层的语义更接近;
  • 共享内存格式与零拷贝桥让数据在算子之间走“走廊”,不必出门;
  • 并行与加速在 Python 视角外完成,Python 在上层保留清晰的意图表达

2.3 编译的三种方式:靠近金属

在“更快”的追求里,有三条常见的路:

  1. 给热点“加外语”:用 C/C++/Rust 写加速内核,Python 当指挥;
  2. 把 Python 子集变成机器能吃的形状:Numba、Cython、Pythran 等工具把“高频循环”编进机器;
  3. 把图抽出来交给后端:深度学习框架把计算表达成“图”,交给 XLA/ONNX/TensorRT 等后端去铺路

每条路都有代价:可移植性、调试体验、开发速度。团队会根据项目寿命、热点分布、人才结构做选择——这不是“对/错”,是“适/不适”

2.4 引擎与前端:从训练到部署

研究里跑得欢的模型,到生产里要面对延迟、吞吐、资源与安全。Python 在这里常常是编排者

  • 用它写服务的胶水、调度脚本、A/B 流程;
  • 把推理交给高效后端与专用引擎;
  • 在可观测性与回归治理上,利用 Python 丰富的生态。

第三线 打包与供应链:让“拿来即用”成为常态

3.1 工程剧场:从“能装上”到“装得对”

最早的胜利是把“装得上”变成日常;随后,团队开始追求“装得对”:

  • 锁定文件约束文件把“我用的这批包”固化成一份账单;
  • 多平台轮子让“这台机”也能快速起跑;
  • CI 里出现了“可复现构建”与“离线缓存”。

3.2 安全感的来源:仓库、签名与身份

供应链安全像城市的路灯:

  • 仓库侧强化审核与二要素认证
  • 维护者侧普及最小权限项目看护制度
  • 社区侧提升对“错别字劫持”“过期域名再利用”等策略的警觉。

3.3 一体化工具:把常用动作装进同一把工具

新工具把“创建环境—解析依赖—安装—发布—运行—打包”串在一起,
把“等一会儿”降到“眨眼”。团队更容易给新人一套脚手架:

“进来,按这条命令跑,不用先学十个名字。”

第四线 并行新常态:从“课堂问题”到“工程答卷”

4.1 路线图:从每解释器到自由线程

并行这条线的故事不是某个按钮,而是一系列改造:

  • 每解释器状态把全局挪成局部;
  • 监控与调试接口让诊断更轻;
  • 自由线程作为可选构建供实验,把“可能性”变成“可验证的现实”。

4.2 生态的协奏:扩展、锁与不变量

在“无 GIL”的世界里,老扩展需要回答三个问题:

  1. 我是否依赖了隐含的“全局互斥”?
  2. 我共享的数据结构是否有清晰的不变量
  3. 我是否能用更细粒度的锁或无锁结构替换“屋顶上的那把大锁”?

工程上,很多团队会先走折中路线:在关键段落保留局部锁,把收益集中在任务并行I/O 并行库内部的真正并行上。

4.3 选择题:多进程、线程、协程与解释器

  • CPU 密集 → 多进程或原生并行后端;
  • I/O 密集asyncio 或线程池;
  • 嵌入/插件子解释器带来的隔离与热插拔;
  • 跨语言协作 → 让擅长并行的专用引擎承担重活。

并行不是目的,吞吐与延迟才是。每个项目的标准答案都不同。

第五线 浏览器与边缘:把解释器带到“最靠近用户”的地方

5.1 浏览器:WASM 的桥与帐篷

在浏览器里跑 Python,曾经像魔术。如今更像搭帐篷:

  • WebAssembly 给了解释器一个安全、可移植的沙盒
  • 教学与可视化工具把“无需安装”作为亮点;
  • 现实的边界是体积与速度,但**“零安装试用”**足以让许多想法开花。

5.2 边缘:小电池的美学

在边缘设备上,功耗、体积、耐久是关键词:

  • Python 作为控制与编排语言,与 C 驱动协作;
  • 现场工程师可以直接在串口 REPL 上热修
  • 教育场景里,“第一次点亮”的体验被反复打磨。

第六线 资金与可持续:把“时间”存进公共账户

社区在 2020s 的关键词之一是可持续

  • 赞助与基金让“维护—评审—回归—文档”这些看不见的劳动被看见;
  • 企业把“关键依赖”的维护工时纳入预算;
  • 大会设立“维护者资助”与“多元参与”项目,降低新人入场门槛。

可持续不是口号,是让道路有人扫、路灯有人换

第七线 课堂与文化:把可读性教成一种习惯

Python 课堂上常见三张海报:

  • “显式优于隐式”;
  • “简单胜于复杂”;
  • “可读性关乎他人,也关乎未来的自己”。

这些句子不是名言,而是评审的标准作业的评分表。当一代又一代新手用它们写下第一百行程序,语言的文化就写进了肌肉记忆。

终章 面向 2030 的问答

  • 问:Python 还会更快吗?

    会,但更像“一切如常地再快一点”。解释器层的改良与后端加速的协同,会继续把红线往下压。

  • 问:无 GIL 会成为默认吗?

    也许。但真正的里程碑不是开关的状态,而是生态在并行语义上的共识与工具链的稳态

  • 问:AI 时代,Python 的位置?

    既是人类可读的前台,也是高效后端的指挥。它擅长把复杂系统讲成清楚的话。

  • 问:下一代开发者会怎么学它?

    在浏览器里、在小板子上、在笔记本中。练习题会更贴近现实,错误消息会更像老师的批注。

历史不是终点,而是方法:当我们理解“为何这样走”,就更能判断“接下来该怎么走”。

卷三完 | 附记:写给后来者的几条建议(故事体)

  • 把版本升级当作例行公事:每年十月,给自己半天时间,读一读 “What’s New”。
  • 先写可读,再写更快:读者是你的未来合作者。
  • 选择适配的并行模型:明确目标(吞吐/延迟/成本),不要陷入技术炫技。
  • 尊重工具链:锁文件、签名、缓存、CI,是让团队有“安全感”的基础设施。
  • 回馈公共池:报 bug、写文档、资助维护者——哪怕是一句“谢谢”,也能让城更暖。

附录一|参考年表(1989—2025·速检版)

便于检索与交叉引用的“事件—版本—要点”清单。

年份版本/事件要点与影响
1989项目启动(CWI)ABC 与 Amoeba 经验融合,确立“可读 + 可扩展”的路径
19910.9.0 公布类/异常/模块/核心容器齐备;邮件列表萌芽
19941.0函数式小工具加入;风格与约定固化
20002.0循环 GC、列表推导、Unicode 融合;工程化起步
2001–20042.2/2.4新式类、生成器、装饰器;PSF 成立;PyPI 上线
2006–20082.5–2.7/3.0上下文管理器;3.0 不兼容更新(文本/字节分离、print 函数化等)
20123.3PEP 393 灵活字符串表示;基础内存布局优化
2013–20143.3–3.4venv、ensurepip、asyncio 奠基
2015–20163.5/3.6类型提示(PEP 484)、async/await、f 字符串
20183.7/治理数据类(PEP 557);BDFL 卸任 → Steering Council
2019–20213.8–3.10赋值表达式、zoneinfo、结构化模式匹配
20223.11Faster CPython(PEP 659 专用化解释器)
20233.12f 字符串文法完备、sys.monitoring、每解释器 GIL 接口
20243.13新 REPL、自由线程(实验构建)、轻量 JIT(实验)
2025生态自由线程路线持续实验、供应链与工具一体化深化

附录二|关键 PEP 导读地图(主题 → 必读清单 → 影响)

按主题组织,附“阅读顺序”与“一句话影响”。

  • 语法与表达力

    • PEP 498(f 字符串)→ 把拼接变成对话。
    • PEP 572(赋值表达式)→ 在表达式里“就地取名”。
    • PEP 634/635/636(结构化模式匹配)→ 让“以形断意”成为日常。
  • 类型系统

    • PEP 484(类型提示)→ 渐进式类型的基石。
    • PEP 646(变长泛型)→ 描述张量/可变参数的维度。
    • PEP 695/696(类型形参/默认)→ 注解更靠近定义,更简洁。
    • PEP 692(**kwargs 精确类型)→ 松散也可精确。
  • 并发与异步

    • PEP 3156(asyncio)→ 事件循环与协程生态。
  • 运行时与性能

    • PEP 393(灵活字符串表示)→ 字符串内存按需。
    • PEP 659(专用化解释器)→ “一切如常地更快一点”。
    • PEP 703(可选无 GIL)→ 自由线程路线的纲领。
  • 打包与分发

    • PEP 427(wheel)→ 二进制分发标准。
    • PEP 517/518(pyproject.toml)→ 构建后端标准化。
  • 发布节奏与治理

    • PEP 602(年更节奏)→ 十月“可预期”。
    • PEP 8016(Steering Council)→ 制度化兜底。

推荐阅读顺序:入门(498/484/3156)→ 工程(517/518/427/602)→ 深潜(393/659/703/634)。

附录三|大事记时间轴(Mermaid)

timeline
    title Python 大事记(1989—2025)
    1989 : 启动于 CWI
    1991 : 0.9.0 发布
    1994 : 1.0 发布
    2000 : 2.0(循环 GC、列表推导、Unicode)
    2001 : PSF 成立
    2003 : PyPI 上线
    2004 : 装饰器进入 2.4
    2008 : 3.0 发布(不兼容革新)
    2012 : PEP 393 生效(3.3)
    2014 : asyncio(3.4)
    2015 : 类型提示(3.5)
    2016 : f 字符串(3.6)
    2018 : 数据类(3.7);治理转向
    2021 : 结构化模式匹配(3.10)
    2022 : Faster CPython(3.11)
    2023 : sys.monitoring、每解释器 GIL(3.12)
    2024 : 新 REPL、自由线程预览、JIT 预览(3.13)
gantt
    title 3.x 演进关键路线
    dateFormat  YYYY-MM
    section 工具链
    wheel/pyproject 标准化    :active, 2013-01, 2018-12
    供应链安全与一体化        : 2021-01, 2025-10
    section 运行时
    PEP393 字符串内存         : 2012-10, 2014-01
    asyncio/async-await       : 2014-01, 2016-12
    Faster CPython (PEP659)   : 2020-01, 2023-10
    自由线程与 JIT(预览)      : 2023-10, 2025-10

附录四|人物群像(故事体小传)

  • Guido van Rossum:把幽默感写进语言名的人;他一度离开方向盘,又在关键时刻回来当“资深乘客”。
  • PSF 的看护者们:他们的工作像城市的环卫与路政,默默却关键。
  • 解释器工程师小队:在字节码与 C-API 的缝隙里打磨传动轴的人。
  • 工具链匠人:把“装上去”变成“装得对”的那群人。
  • 教育与创客布道者:他们在教室与创客空间点起第一堆小火。

这些小传可作为演讲/课程的开场白素材,帮助“把语言讲成人”。

附录五|术语表(A–Z)

  • ABI:Application Binary Interface,二进制兼容契约。
  • async/await:协程关键字,配合事件循环表达异步 I/O。
  • GIL:全局解释器锁;在传统构建中保证对象模型的简化与线程安全。
  • HPy:面向多实现的 C 扩展接口尝试。
  • PEP:Python Enhancement Proposal,变更提案与治理文档。
  • REPL:Read–Eval–Print Loop,交互式解释器。
  • Wheel:Python 二进制分发格式(.whl)。

附录六|版本与特性对照表(1.x → 3.13)

版本核心特性(选)工程/生态影响
1.0函数式工具、模块化确立“可读性契约”
2.0循环 GC、列表推导、Unicode工程化起步
2.2新式类统一对象模型、生成器迭代器/延迟计算
2.4装饰器横切关注点的声明式化
2.5–2.6with/上下文管理器资源管理一等公民
2.72.x 终章3.x 迁移锚点
3.0文本/字节分离、print 函数化长期一致性
3.3PEP 393 字符串表示内存与切片友好
3.4asyncio、ensurepip并发基石、pip 标配
3.5–3.6类型提示、async/await、f 字符串工具驱动的类型化、可读性增强
3.7数据类业务建模便捷
3.8–3.10赋值表达式、zoneinfo、模式匹配语义与标准库增强
3.11PEP 659 专用化解释器广谱提速
3.12sys.monitoring、每解释器 GIL 接口调试与隔离粒度提升
3.13新 REPL、自由线程/JIT(实验)交互体验与并行探索

附录七|实现对比矩阵

实现定位优势权衡典型场景
CPython事实标准兼容性强、生态最全性能以解释器为主通用开发、扩展生态
PyPyJIT纯 Python 长寿命负载快与 C 扩展的边界成本Web 服务、算法密集纯 Python
MicroPython/CircuitPython微控制器体积小、REPL 友好标准库子集教育、创客、边缘控制
Jython/IronPython生态桥接JVM/.NET 集成跟进节奏与兼容性嵌入企业平台、脚本化

附录八|并行路线深潜与迁移清单

  1. 理解界限:默认构建仍有 GIL;自由线程为实验构建。
  2. 识别共享:梳理全局状态、单例、缓存;明确跨线程/解释器边界。
  3. 锁的粒度:用细粒度锁或无锁结构代替“大屋顶锁”。
  4. 扩展适配:审视 C-API 使用;避免隐式依赖 GIL 的假设。
  5. 观测先行:在 sys.monitoring 等接口上布点,观察真实瓶颈。
  6. 回退预案:预留“在自由线程下禁用 X”的开关,保证服务可回退。

附录九|打包与供应链实践手册(团队版)

  • 策略:锁文件 + 受控索引镜像 + 强制 2FA。
  • 流程:本地可复现 → CI 复现校验 → 发布签名 → SBOM 留档。
  • 应急:误植/劫持应对预案、依赖冻结窗口、回滚剧本。

附录十|课堂资源包(可复用故事片段)

  • 《冬夜的终端光》:讲“命名与文化”。
  • 《两条铁轨》:讲 2.x → 3.x 迁移的动机与现实。
  • 《更快这件小事》:讲解释器工程的耐心。
  • 《方向盘》:讲治理与制度化。

用于讲座/课件开场,配合“年表 + 时间轴”快速建立宏观认知。

附录十一|索引(示例条)

A:ABC 语言;ABI;asyncio;assign(PEP 572)……

B:BDFL;Buffer Protocol……

C:CPython;C-API;CircuitPython;Concurrency……

Z:zoneinfo;Zen of Python……

后记|致读者

如果这是一座城,那么你已经走完三条环线与四条支线。历史不是回望,而是导航:当你知道每一个路口为何而设,你就能在下一个岔路口,走得更稳。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页