(第一次翻译访谈类文章,里面口语化东西如果处理得不好请不吝赐教,我尽力把意思表达清楚。)

Guido van Rossum创造了Python语言(当下流行的动态语言之一,Google和NASA这样的组织都在使用)。上周日,Google资深软件工程师van Rossum出席了在硅谷的PyCon会议,并与我们InfoWorld编辑Paul Krill探讨了Python的成长和质疑。

InfoWorld: 你曾经回答过那些批评Python太慢的人。你说:每当你需要用Python写点什么时候,都觉得它已经足够快了。(既然如此)为什么还有质疑它太慢的批评之声呢?

van Rossum: 人们通常会那么做:他们找一个工具,然后把它打造得不可思议。在这不可思议软件的某一部分,他们正在干着疯狂的事情,有的时候一些疯狂的事情包括一个完整的计算分支,比如遍历一个有十亿节点的图或者分析百万兆的email信息等等。

有些时候,会因为系统的一小部分原因而中止整个系统。如果你仅仅写一些头脑简单的Python循环语句,可能会发现那就是你系统的瓶颈。我们通常可以把那部分用很少的C或C++替换掉,而不是用一个更快的语言重写整个系统,因为大多数你所做的事情与编程语言的速度无关。

InfoWorld: Python语言目前的最新版本是多少?

van Rossum: 目前有两个不同的版本。我们正在尝试最终将这两个版本统一在一起。我们正在尝试砍掉Python 2的分支,所以在Python 2分支上的最后一片叶子是Python 2.7。但是现在你仍可以看到许多Python 2.6和2.5的分支。在Python 3的分支上,目前的发布版本是3.2,最近几个月我们仅仅发布了一个3.3的alpha版,3.3不久会正式发布。

InfoWorld: Python 3分支最吸引人的地方在哪里?

van Rossum: Python 2已经累计了许多方式去做同一件事情。同样,Python 2已经引入了一种处理Unicode的方式;在2000版本引入它时,我们对于能够支持Unicode并且能够向后兼容表示非常自豪。过了06至07年之后,我们意识到需要一种完全不同的方式去处理Unicode。同样我们找不到一种能让新的正确支持Unicode的方法与过去版本语言兼容。

因为这件事,我们想:与其发一个受到严格兼容限制的版本,不如直接做一个新的发布版(Python 3)。之后,我们清理了一堆东西,丢掉了许多过时的特性。虽然用户被告知Python 3不与Python 2兼容,但是它们依然“像”是同一门语言【1】。

InfoWorld: 如果不兼容的话,你是否不得不重新编译Python 2的应用?(译注:小编貌似不太熟悉动态语言,动态语言是不需要编译的--至少不需要自己来编译)

van Rossum: 大多数情况下,你不得不修改该原有的Python 2应用的代码。我们提供了一个从2升级到3的工具,它可以自动完成大多数的改动。但是仍有许多事情是不能自动化的,所以你必须手动修订。因此,人们按照一些策略,编写受限制的Python 2代码(通过不适用某些特性),然后他们的代码就魔术般地兼容了Python 3。

InfoWorld: 你谈到关于反对动态类型的争执。你说:如果你相信编译器可以找到程序中的所有bug,那你干软件开发一定没多久。所以你对Python的动态性感到很满意是么?

van Rossum: 完全如此。编程语言的基本哲学就是:不要去修改。我从没看到Python突然增加了某个静态特性或者有向这方面发展的特性。

InfoWorld: 你提到过:从某些角度上来说,你希望对python程序进行一个全局的静态分析【2】将会是很现实的。这么做对Python开发者有什么好处?

van Rossum: 全局静态分析能帮你找到某种类型的bug。另一件你可以做的事情是优化。

InfoWorld: Python的GIL【3】(Global Interpreter Lock)是否是一个多核处理时的障碍?

van Rossum: 或多或少有一点。如果你使用多核处理器,就不能并行地执行Python字节码,因为Python字节码需要GIL才能运行,而只有一个核可以拥有GIL。当Python线程没有获得GIL的时候,它们能做的也只有等待I/O,或者也可以调用C/C++代码。

举个例子,在NumPy中做大型矩阵操作,当你给NumPy一个矩阵或者大型数组时,然后你可以让它完成1000个数据计算,NumPy会释放GIL。我不清楚NumPy是否有并行机制,但是你可以想象,如果有10个核,你可以把工作并行在10个核上,每个核上处理不同的数据块,没有一个核需要GIL,因为它们都不会处理Python对象。

译注: 【1】Python的版本:Python的两大版本是让很多初学者头疼的东西。Python 2和Python 3还是有不少差异的,这就导致两个版本是没法互相兼容的。目前的很多开源工程还是基于Python 2系列来写的。 【2】静态分析:在不运行代码的情况下对代码进行检查,写过Java的同学应该知道,比如FindBugs。这些工具主要检查代码中有没有明显的bug,比如死循环,使用一个没赋值的变量,等等。 【3】GIL:Python虚拟机的一个核心部件,称为全局解释器锁,Python的字节码只有获得GIL才能运行,而GIL一个Python虚拟机只有一个,所以理论上说,同一时刻,只有一个Python进程能运行。当然Python同样有运行C/C++语言的能力,运行这些代码不需要获得GIL。GIL是Python语言中一个争议很大的东西。