PEP 3003 – Python 语言暂停
- 作者:
- Brett Cannon, Jesse Noller, Guido van Rossum
- 状态:
- 最终版
- 类型:
- 流程
- 创建日期:
- 2009年10月21日
- 发布历史:
- 2009年11月3日
摘要
本PEP提议,从Python 3.1发布之日起,暂停对Python语言语法、语义和内置功能的任何更改,期限至少两年。具体而言,暂停期将包括Python 3.2(在3.1发布后18-24个月发布),但允许Python 3.3(假设未提前发布)再次包含语言更改。
暂停功能旨在让非 CPython 实现“赶上”语言的核心实现,帮助简化 Python 3.x 的采用,并为社区提供更稳定的基础。
基本原理
这个想法是由 Guido van Rossum 在 python-ideas [1] 邮件列表中提出的。他的电子邮件前提是减缓 Python 核心语法、内置函数和语义的修改,以允许非 CPython 实现赶上 Python 2.x 和 3.x 的当前状态。
Python 作为一种语言,不仅仅是核心实现——CPython——它拥有一个丰富、成熟和充满活力的实现社区,例如 Jython [2]、IronPython [3] 和 PyPy [4],这些实现不仅对社区有益,而且对语言本身也有益。
还有一些,例如 Unladen Swallow [5](CPython 的一个分支)不寻求创建替代实现,而是寻求增强 CPython 本身的性能和实现。
Python 3.x 在过去几年中是 Python 开发的重要组成部分。它的发布,以及由它和之前的 2.6.x 版本引入的大量语言更改,使替代实现“跟上”核心 Python 开发处于严重劣势。
此外,CPython 所实现的最新语言版本中的许多更改尚未被普通用户广泛使用。例如,大多数用户仅限于其操作系统预装的解释器版本(通常是 CPython)。大多数操作系统供应商才刚刚开始发布 Python 2.6——发布 Python 3.x 的甚至更少。
由于 Python 2.7 预计将是 Python 2.x 代码线的有效“生命周期结束”,而 Python 3.x 将是未来,因此暂停语言本身的修改符合 Python 核心开发的最大利益,以允许所有这些外部实体赶上并协助采用和迁移到 Python 3.x
最后,暂停旨在释放核心开发内部的时间,以专注于其他问题,例如 CPython 解释器及其改进、标准库等。
本次暂停不允许例外——一旦接受,任何待定的语言语法或语义更改都将推迟,直到暂停解除。
本次暂停不适用于任何其他 Python 实现,这意味着如果需要,其他实现可以添加偏离标准实现的功能。
详情
不可更改
- 新的内置函数
- 语言语法
- 语法文件基本上是不可变的,除了歧义修复。
- 通用语言语义
- 语言按原样运行,只有特定豁免(见下文)。
- 新的 __future__ 导入
- 这些是被明确禁止的,因为它们有效地改变了语言语法和/或语义(尽管使用了编译器指令)。
逐案豁免
- 内置函数的新方法
- 可以提出向内置对象添加方法的理由。
- 不正确的语言语义
- 如果语言语义根据原始设计的意图被证明是模糊或不正确实现的,那么语义可能会改变。
- 难以实现的语言语义
- 由于其他虚拟机尚未开始实现 Python 3.x 语义,因此某些语义可能难以复制。在这些情况下,可以对其进行更改,以简化其他虚拟机对 Python 3.x 的采用。
允许更改
- C API
- 只要不违反本暂停的其他限制,更改 CPython 的底层 C 代码是完全可以接受的。例如,删除 GIL 将是可行的,前提是当前原子操作保持原子性。
- 标准库
- 由于标准库不直接与语言定义绑定,因此不受本次暂停的限制。
- 将 3.x 功能移植到 2.x
- 暂停仅影响 3.x 中新增的功能。
- 导入语义
- 例如,PEP 382。毕竟,导入语义在不同的 Python 实现之间本来就有所不同。
追溯
重要的是要注意,暂停涵盖了自 Python 3.1 发布以来所有更改。此规则旨在避免在暂停讨论期间将功能匆忙或偷偷地引入 CPython 源代码树。对 py3k 开发分支的 NEWS 文件的审查显示,无需回滚任何提交即可实现此目标。
延期
暂停的期限只能通过新的 PEP 延长。
版权
本文档已置于公共领域。
参考资料
来源:https://github.com/python/peps/blob/main/peps/pep-3003.rst