PEP 3003 – Python 语言暂停
- 作者:
- Brett Cannon, Jesse Noller, Guido van Rossum
- 状态:
- 最终
- 类型:
- 流程
- 创建时间:
- 2009-10-21
- 历史记录:
- 2009-11-03
摘要
本 PEP 提出对 Python 语言语法、语义和内置函数进行暂时暂停(中止),暂停时间至少为 Python 3.1 发布后的两年。特别是,暂停将包括 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
最后修改时间:2023-09-09 17:39:29 GMT