PEP 3000 – Python 3000
- 作者:
- Guido van Rossum <guido at python.org>
- 状态:
- 最终版
- 类型:
- 流程
- 创建:
- 2006年4月5日
- 更新历史:
摘要
本 PEP 为 Python 3000 的开发制定了指导原则。理想情况下,我们首先就流程达成一致,并在流程确定并明确后才开始讨论功能。在实践中,我们将同时讨论功能和流程;通常,关于特定功能的辩论会引发流程讨论。
命名
Python 3000、Python 3.0 和 Py3K 都是指同一件事。该项目称为 Python 3000,或缩写为 Py3k。实际的 Python 版本将被称为 Python 3.0,这就是“python3.0 -V”将打印的内容;实际的文件名将使用我们对 Python 2.x 使用的相同命名约定。我不想为可执行文件选择一个新名称,也不想更改 Python 源文件的扩展名。
PEP 编号
Python 3000 的 PEP 从 PEP 3000 开始编号。PEP 3000-3099 是元 PEP——这些可以是流程或信息性 PEP。PEP 3100-3999 是功能 PEP。PEP 3000 本身(本 PEP)是特殊的;它是 Python 3000 元 PEP 的元 PEP(即它描述了定义流程的流程)。PEP 3100 也是特殊的;它是在我们真正开始 Python 3000 流程之前,为(希望)包含在 Python 3000 中选择的功能清单。最后,PEP 3099 是一个不会更改的功能列表。
时间线
请参阅 PEP 361,其中包含 Python 2.6 和 3.0 的发布计划。这两个版本将同步发布。
注意:标准库开发预计将在 3.0a1 发布后加速。
我预计在一段时间内将会有并行的 Python 2.x 和 3.x 版本;Python 2.x 版本将比传统的 2.x.y bugfix 版本持续更长时间。通常,一旦版本 2.(x+1) 发布,我们就停止发布 2.x 的 bugfix 版本。但我预计即使在 3.0(最终版)发布后,也至少还会发布一两个新的 2.x 版本,可能一直持续到 3.1 或 3.2。这在一定程度上取决于社区对持续 2.x 支持的需求、3.0 的接受度和稳定性以及志愿者的精力。
我预计 Python 3.1 和 3.2 将比 2.x 系列的习惯做法更快地发布在 3.0 之后。一旦社区对 3.x 感到满意,3.x 的发布模式就会稳定下来。
兼容性和过渡
Python 3.0 将破坏与 Python 2.x 的向后兼容性。
Python 2.6 代码不需要在 Python 3.0 上运行而无需修改。甚至子集也不行。(当然,会有一个很小的子集,但它会缺少主要的功能。)
Python 2.6 将通过以下两种方式支持前向兼容性
- 它将支持一种“Py3k 警告模式”,该模式将动态地(即在运行时)警告将在 Python 3.0 中停止工作的功能,例如假设 range() 返回列表。
- 它将包含许多 Py3k 功能的反向移植版本,这些版本可以通过 __future__ 语句启用,或者简单地允许在并排使用旧语法和新语法(如果新语法在 2.x 中是语法错误)。
取而代之的是,并且作为 2.6 中前向兼容性功能的补充,将有一个单独的源代码转换工具 [1]。此工具可以进行上下文无关的源到源转换。例如,它可以将 apply(f, args)
转换为 f(*args)
。但是,该工具无法进行数据流分析或类型推断,因此它只是假设此示例中的 apply
指的是旧的内置函数。
需要同时支持 Python 2.6 和 3.0 的项目的推荐开发模型如下
- 您应该拥有覆盖率接近完整的优秀的单元测试。
- 将您的项目移植到 Python 2.6。
- 打开 Py3k 警告模式。
- 测试和编辑,直到没有警告为止。
- 使用 2to3 工具将此源代码转换为 3.0 语法。不要手动编辑输出!
- 在 3.0 下测试转换后的源代码。
- 如果发现问题,请对源代码的2.6版本进行更正,然后返回步骤 3。
- 当需要发布时,请发布单独的 2.6 和 3.0 tarball(或您用于发布的任何存档形式)。
建议不要编辑 3.0 源代码,直到您准备好将 2.6 支持减少到纯维护(即您通常会将 2.6 代码移动到维护分支的那一刻)。
PS。我们需要一个元 PEP 来详细描述过渡问题。
实现语言
Python 3000 将使用 C 语言实现,并且该实现将作为 Python 2 代码库的演变派生出来。这反映了我(以及我与 Joel Spolsky [2] 共享的)关于完全重写的危险性的观点。由于 Python 3000 作为一种语言是对 Python 2 的相对温和的改进,因此我们可以通过不尝试从头开始重新实现语言来获得很多好处。我不反对并行的从头开始的实现工作,但我的工作将集中在我最了解的语言和实现上。
元贡献
作者欣然接受对此 PEP 添加其他文本的建议。更欢迎针对上述主题和其他主题起草元 PEP!
参考文献
版权
本文档已进入公有领域。
来源:https://github.com/python/peps/blob/main/peps/pep-3000.rst