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 PEPs 的编号从 PEP 3000 开始。PEPs 3000-3099 是元 PEPs —— 这些可以是流程或信息性 PEPs。PEPs 3100-3999 是功能 PEPs。PEP 3000 本身(本 PEP)是特殊的;它是 Python 3000 元 PEPs 的元 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 错误修复版本更长。通常,一旦版本 2.(x+1) 发布,我们就会停止发布 2.x 的错误修复版本。但我预计即使在 3.0(最终版)发布之后,至少还会有一到两个新的 2.x 版本发布,很可能持续到 3.1 或 3.2。这在一定程度上将取决于社区对持续 2.x 支持的需求、3.0 的接受度和稳定性以及志愿者的精力。
我预计 Python 3.1 和 3.2 将在 3.0 发布后比 2.x 系列惯例更快地发布。一旦社区对 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(或您用于发布的任何存档形式)。
建议在您准备将 2.6 支持减少到纯维护阶段(即您通常会将 2.6 代码移至维护分支的时刻)之前,不要编辑 3.0 源代码。
附:我们需要一个元 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
最后修改时间: 2025-02-01 08:59:27 GMT