Python 2.2 与 Guido van Rossum(Python 创建者)的问答
随着 2.2 版本 [以及现在的 2.2.1 版本] 最终向世界发布,我们花了一些时间采访了 Python 的发明者和 PythonLab 的主管 Guido van Rossum,请他分享一些关于最新 Python 新闻的想法。

Wesley Guido,感谢您今天抽出时间与我们Linux Journal 谈话。
Guido 很荣幸能与 LJ 合作。
Wesley 请用一两句话概述一下新的 2.2 版本。
Guido 2.2 版本的发布是 Python 新对象模型的第一步,在这个模型中,内置类和用户定义的类最终具有平等的地位。此外,还有很酷的东西,特别是生成器。
Wesley 为什么当前的开发者应该从 Python 2.0.x 或 2.1.x 迁移到 2.2.x?
Guido 为了从新的样式类特性中获益,例如属性、静态方法和子类化列表和字典,或者为了使用生成器。
Wesley 为什么当前的开发者应该从 Python 1.x 迁移到 2.2.x?
Guido 除了已经提到的特性之外,还可以从修复的大量错误以及 2.0 中添加的特性中获益,例如列表推导式、Unicode、XML 和新的正则表达式实现。如果您对使用 1.5.2 感到满意,那就请便。如果 1.5.2 中有什么让您恼火的地方,那么很可能在 2.x 中已经修复了。
Wesley 一些开发者以前从未见过迭代器或生成器。它们来自哪里,为什么要添加到 Python 中?
Guido C++ 具有迭代器,它们实际上是一种非常常见的编程模式,只是通常不是语言特性。但是在像 Python 这样的解释型语言中,语言和库之间的界限通常是模糊的。生成器来自一种鲜为人知的语言 Icon,但它们应该受到关注;它们是一种非常强大的方式,可以在某些情况下编写更具可读性的代码。您也可以将它们视为一种驯服的协程形式,这是一个古老的想法(例如,Knuth 描述过),但不幸的是,由于它需要堆栈调整而过时了。
Wesley 在许多其他面向对象的语言中,类被视为类型,它们的实例被视为这些类型的对象。为什么 Python 不是这种情况,又为什么会出现转变?
Guido 那是一个实现上的产物。Python 的第一个版本(从未发布,但在 1990 年初在 CWI 内部使用)没有 class 语句;向程序添加新数据类型的唯一方法是用 C 编写扩展。有人建议我添加类,以便最终用户也可以定义新的数据类型。我发明了一种实现,它只需要对抽象 Python 虚拟机进行最小的更改。但是 class 语句无法完全做到 C 程序员可以做到的事情。长期以来,我知道这需要修复,但是解决它需要大量的实现工作,而我以前没有时间来做——部分原因是,在过去的十年里,该语言变得如此成功,以至于我无法改变规则。我必须确保旧代码继续不变地工作,并且我必须提供一种迁移路径来使用新特性。我认为我在这两方面都取得了成功。
Wesley 更改除法运算符一直是许多争议和辩论的根源。您要对各方说些什么,以尽量减少口水战?
Guido 想要新除法运算符的人不需要被告知要尽量减少口水战——真正需要安抚的是那些错误地担心他们所有代码都会在一夜之间崩溃的人。这与新样式类的问题相同:99% 的实现工作都用于寻找在不破坏旧代码的情况下实现它的方法。在 Python 3.0 之前,使用 / 进行整数除法的代码都不需要更改,而 Python 3.0 还需要几年时间。与此同时,人们可以选择在每个模块的基础上使用 / 进行浮点除法。我还提供了两个工具(finddiv.py 和 fixdiv.py),可以用来跟踪和修复需要更改为 // 的 / 运算符,以便在 Python 3.0 中正常工作。我们已经将整个标准库转换为在必要时使用 //。这不是一项特别困难的任务,但它不可能 100% 自动化,因为在编译时无法确定操作数类型。顺便说一句,几乎普遍受到欢迎的整数语义更改是,当对整数的任何操作都会引发 OverflowError 时,自动转换为 long 类型。
Wesley 对于编写 Python 扩展的人员,有什么新的发展吗?
Guido 是的,他们可以创建标准类型的子类类型,并且可以创建可子类化的类型。类型对象中有很多新的槽,扩展作者可以使用它们来微调在创建或销毁其类型的对象时发生的情况。
Wesley Python 2.2 带来了许多新的和改进的模块。您认为 Python 标准库中最重要的十个更新是什么?
Guido 令人惊讶的是,我通常不是库的最前沿用户,所以我无法列出十个。首先,有 Mailman 作者 Barry Warsaw 的新电子邮件包。还有我的同事 Fred Drake 的热点分析器、Fredrik Lundh 的 XML-RPC 支持,以及最后但并非最不重要的,Jun-ichiro “itojun” Hagino 和 Martin von Loewis 共同开发的 IPv6 支持。我认为 Python 的 IPv6 支持远远领先于其他语言。
Wesley 2.2 的新特性是否会包含在 Jython(Java 语言 Python 解释器)中?
Guido 是的,Jython 开发者一直在 python-dev 邮件列表中积极参与,以确保我们不会添加在 100% 纯 Java 中无法实现的特性。这就是生成器函数需要使用新关键字的原因之一——Jython 需要在编译时知道某个东西是生成器。他们在我们发布 Python 2.1 后不久发布了最终的 Jython 2.1,所以我预计他们正在开发 Jython 2.2。类型类统一工作在 Jython 中应该比在 Python 的 C 实现中更容易,因为他们已经将内置类型和用户定义的类都基于 Java 类。
Wesley Jython 2.1 在 Python 2.2 之后不久发布。它与哪个版本的 Python 最兼容?换句话说,Jython 落后多少?
Guido Jython 版本号与 Python 版本号匹配,因此 Jython 2.1 与 Python 2.1 兼容。
Wesley 我们对 Python 2.3 有什么期待?该版本有什么时间表吗?
Guido 我预计 2.3 将是一个整合和性能调整的版本,而不是像 2.2 那样具有宏大新特性的版本。我们也可能会更多地关注标准库,而不是核心语言的更改。现在已经有了 2.3 的时间表;有关暂定的未来发布日期,请参阅 PEP 283。我喜欢每六个月发布一个新版本,就像我们从 2.0 开始所做的那样。我们已经完成了 2.2.1,这是一个针对 2.2 的纯错误修复版本,就像 2.1.2 是针对 2.1 的纯错误修复版本(我确信是最后一个)一样。这很重要,因为那里有很多第三方代码(例如 Zope 2.5)依赖于 2.1,并且无法立即迁移到 2.2。
编者按:请关注 Wesley 下个月的 LJ 文章,了解关于 Python 2.2 进展的更多细节。
