4. Python之父:我与Python(上:CWI部分)

原文by Guido van Rossum 2009-01-20 翻译by kant


1. 开发Python的背景

Python 最初开发于荷兰阿姆斯特丹的一所研究机构,即 CWI,这是一个荷兰语缩写,意思是数学和计算机科学研究学会。CWI 是个很有意思的地方,里面主要做数学与计算机方面的学术研究,因此总是有很多博士生来来往往,一些老前辈可能还记得它最初的名字是数学研究中心——不过,最为人知的还是在这里诞生了 Algol 68 编程语言。(译注:现在则以 Python 的诞生地而闻名)

1982年下半年我到 CWI 上班,那时才刚毕业,一开始是在 Lambert Meertens 和 Steven Pemberton 领导下的 ABC 语言组做程序员。4、5年后,ABC 语言项目因为不太成功被停掉了,我到了 Sape Mullender 领导的 Amoeba 组,Amoeba 项目做的是基于微内核的分布式系统,由 CWI 和阿姆斯特丹自由大学联合研究。1991年,Sape Mullender 去了特温特大学,我也转到新成立的多媒体组,当时由 Dick Bulterman 负责。

Python 是我在 CWI 工作经验的直接产物。ABC 语言提供了灵感,Amoeba 项目提供了动机,而多媒体组则促使其发展。不过,就我所知,CWI 官方并没有为 Python 的开发提供专用资金——事实上,Python 反而成了 Amoeba 项目和多媒体组所用的一种重要工具。

当时之所以开发 Python,是我感觉 Amoeba 项目需要一门高级编程语言。用 C 语言写系统管理程序太慢,而且因为各种各样的原因,很多程序在 Bourne shell (译注:Version 7 Unix默认的Unix shell)里无法运行。更关键的是,作为一种全新设计的分布式微内核系统,Amoeba 的很多基本操作(元操作 | primitive operations)与 Bourne shell 支持的操作有很大区别(粒度更细)。因此需要一门语言来作为“C语言与shell之间的桥梁”——很长一段时间内,大家也是这么看待 Python 的。

你可能会问,为什么不用一门现有编程语言呢?就我看来,当时并没有什么适合的语言可供选择。Perl 3 我也熟悉,不过它对 Unix 系统的依赖甚至比 Bourne shell 更严重,而且我也不喜欢 Perl 的语法——个人对编程语言的偏好,主要受 Algol 60、Pascal、Algol 68的影响(都是我最初接触的语言),当然也包括 ABC 语言,毕竟我在这里花费了整整4年青春。因此,我决定自己设计一门语言,借鉴 ABC 语言的所有优点,但解决其各种问题(至少是我认为的问题)。


2. Python名字的由来

第一个要解决的问题就是这门语言的名字!当初,ABC 语言团队在取名的时候就比较纠结,最初的名字叫 B 语言,不过因为已经有一门大家更熟悉的 B 语言了,于是不得不放弃。不过 B 语言也只是个暂定名称(当时的说法是,B 是一个包含语言名称的变量的名称,于是干脆以 B 作为语言名称)。ABC 语言团队还组织了一场公开的取名比赛,不过提交的名称中没有中意的,最后还是使用了内部备用名称,也就是 ABC,意思是这门语言要让编程就像“ABC”一样简单——然而我从没这么觉得。

我想,关于语言的名字,与其复杂化,不如简单化。于是就用了我想到的第一个词: Monty Python’s Flying Circus ,一个我最喜欢的滑稽剧团的名字。以一个滑稽剧团的名字命名一个“高端大气”的实验室项目,有一种恰到好处的讽刺意味。而 Python 这个词好记且刺激(蟒蛇),又与用著名人物的名字命名程序语言的传统相符,比如 Pascal、Ada、Eiffel——Monty Python 的马戏团可能并不以促进科技发展闻名,但极客们肯定是超喜欢他们的。并且,这样的命名方式,也与当时 Amoeba 项目中以电视节目的名称命名程序的习惯一致。

多年以来,我一直拒绝大家将这门语言与蛇联系在一起。不过,当 O’Reilly 出版社要在他们出版的第一本 Python 书(Python编程 | Programming Python)的封面上放一张蛇的照片的时候,我最终还是同意了。 使用动物照片作为书籍封面是 O’Reilly 出版社的传统,既然一定要用一种动物,也只能是蛇了。


3. Python的早期历史

名字的问题解决后,我在1989年12月末开始开发 Python,并在1990年1月有了第一个可用版本。虽然没有当时的记录,我还是非常记得我为 Python 写的第一个实现是一个简单的 LL(1) 分析器生成器,我把它叫做“pgen”。这个分析器生成器至今依然是 Python 源码的一部分,可能也是所有源码中改动最少的部分。在1990年,一些CWI 内部人员使用了最初版本的 Python ,主要是 Amoeba 项目的人。除我之外,当时和我一个办公室的同事,程序员 Sjoerd Mullender(Sape Mullender的弟弟) 和 Jack Jansen(在我离开 CWI 以后,他依然为 Python 开发苹果系统接口很多年) 也是 Python 的主要开发者。

1991年2月20日,我在 alt.sources 新闻组发布了 Python (为此,我得把 21 个编码文件组合再解码为一个压缩好的 tar 文件),这就是 0.9.0 版本。发布时采用的协议基本与当时 X11 项目所用的 MIT 协议一字不差,并把 CWI 的前身,数学研究中心作为责任机构。因此可以说,与我的绝大多数其它作品一样,Python 远在 Eric Raymond 和 Bruce Perens 于1997年提出“开源”这个概念以前就已经开源了。

0.9.0 版本的发布,立即得到了很多反馈,于是在随后几年中,我一直稳定地进行版本更新。同时也开始用 CVS 进行版本管理,一方面也便于与 Sjoerd 和 Jack 协作开发(巧合的是,CVS 起源于 Dick Grune 的几个 shell 脚本,而 Dick Grune 也是 ABC 语言团队的早期成员之一)。我写了一个 FAQ ,贴在一些新闻组中,正如之后大家把 FAQ 贴在 web 上一样。另外还发起了一个邮件列表。1993年3月,有了 comp.lang.python 新闻组,不过我并没有直接参与这个新闻组的创建。这个邮件列表和新闻组之后通过一个双向接口整合了。现在,这个双向接口已经成为 GUN Mailman 的一个特性,Mailman 是现在主流的开源邮件列表管理软件,本身也是用 Python 写的。

1994年夏天,有人在 comp.lang.python 新闻组里发了一个“如果吉多(译注:作者名字)被车撞了怎么办?”的帖子,讨论快速发展的 Python 社区与我的个人影响的独立性。不过,随着 Michael McLay 邀请我去 NIST 做访问学者,这个讨论也就终结了。NIST 是美国国家标准技术研究所,前身是位于马里兰州盖瑟斯堡的美国国家标准局。当时他们有几个相关项目想使用 Python,邀请我去,主要是为了帮助他们提高 Python 技巧,如果可能的话,也根据他们的需求改进 Python。

1994年11月,由于 NIST 程序员 Ken Manheimer 的支持与鼓励,我在 NIST 举行了第一次 Python 研讨会。当年参加研讨会的20个人中,大约有一半依然活跃在 Python 社区,或者领导着他们自己的开源项目(Jim Fulton 的 Zope 项目和 Barry Warsaw 的 GNU Mailman 项目)。也因为 NIST 的支持,我参加了圣达非的 USENIX 小语言大会(译注:USENIX,高等计算机系统协会),并在会上对大约400人作了一次演讲。大会组织者是 Tom Christiansen,一位思想开放的 Perl 支持者,他还把我介绍给 Perl 创始人 Larry Wall 和 Tcl/Tk 的作者 John Ousterhout。

下一篇:我在美国的工作……


发表评论

评论列表,共 0 条评论