The History of Python

2009年4月25日星期六

个人历史 第一部分 在CWI的日子

英文原文链接:http://python-history.blogspot.com/2009/01/personal-history-part-1-cwi.html

原文作者:Guido van Rossum

Python最早诞生在阿姆斯特丹一个叫CWI的研究机构,CWI是一个荷兰机构名称的缩略语,翻译过来意思就是数学和计算机科学中心。CWI是个有意思的地方,由荷兰教育部提供资金,也接受其他研究基金资助,负责管理计算机科学和数学学科在学术方面的研究。无论何时,在CWI都能看到大量的博士生在闲逛,也能看到还记得单位原来名称“数学中心”的行内老前辈。最令CWI名声在外的事情当属这儿发明的编程语言 Algol 68了。

我在CWI的工作开始于1982年下半年,当时刚从大学毕业,在Lambert Meertens Steven Pemberton负责的ABC组做程序员。四五年后,ABC由于反响不太理想而项目中指终止,我去了由Sape Mullender负责的CWI Amoeba组。Amoeba组做的是CWI和阿姆斯特丹自由大学联合开发的基于微内核的分布式系统, 由Andrew Tanenbaum负责。1991年Sape离开CWI,去Twente大学做教授。我去了新成立的由Dick Bulterman负责的多媒体组。

Python是我在CWI工作时的直接成果。正如我后面要提到的那样,ABC给了我开发Python的关键启发,Amoeba则是开发Python的直接诱因,而多媒体组则是Python成长的摇篮。然而至少据我所知,CWI没有正式资助过Python开发。Python做过Amoeba和多媒体两个组的重要工具而得以成长,CWI是这一过程的见证者。

我最初设计Python的动机是感觉Amoeba项目缺少一门高级语言。我发现用C开发系统工具过于耗时。而使用Bourne shell 也有一些不妥之处。其中最重要一点就是作为新设计思路下的微内核分布式系统,Amoeba的基本操作与Bourne shell所适用的传统操作系统的基本操作相去甚远(前者改进明显)。因此,需要一门语言来“消除C和shell之间的隔阂”。Python有很长一段时间用把这个当做卖点。

看到这儿,你或许会问“为什么不改进一门已有的语言呢?”在我看来,当时并没有太多合适的语言可选。我对Perl 3比较熟悉,但是Perl和Unix的结合比起Bourne shell来还紧密。我也不喜欢Perl的语法,我对语法风格的偏好受以前所学语言影响很深,如Algol 60、Pascal和Algol 68,还有最后学习也同样重要的ABC,我曾为之付出四年的时光。所以,我决定设计一门自己的语言,尽量从ABC中借鉴一切我喜欢的特性,同时修正我认为ABC存在的问题。

我首先想修改的就是名字!碰巧,ABC团队在为自己所开发开发语言选择名字的时候遇到了一些麻烦。最初选定的名字B未获通过,是因为已经有一门更早更为人所知的语言用了B这个名字。另外B也只是作为暂定名(有个笑话说B是包含了语言名字的变量名,所以用斜体)。团队公开征集新名字,可惜参赛方案无一满意,内部提案最终中选。这个名字想表达的意思是说这门语言使得编程像学字母ABC一样简单,但是这些说法从未能让我满意。

因此,与其在起名问题无休无止的耗下去,我决定不再纠缠。我就选了首先想到的事物,也就是Monty Python’s Flying Circus,我最喜欢的戏剧团之一。对这个实质上的“小私活”来说,这个称呼有些风马牛不相及。“Python”易记、干脆,符合当时采用名人对编程语言命名的传统,如Pascal,Ada,和Eiffel。Monty Python马戏团虽不在科技方面见长,去也为相当多极客喜爱。这个命名也符合CWI Amoeba组用电视剧命名程序的传统。

很长一段时间,我都拒绝把该语言和蛇联系起来的企图。最终,当O’Reilly准备在他们出版的第一本Python书籍《Programming Python》封面上放一条蛇的时候,我做了让步。用动物做封面是O’Reilly的传统,既然非要用一个动物,我想是一条蛇也好。

名字定了之后,我在1989年12月份开始动手实现Python。在1990年的头几个月就有了一个可工作版本。我没有当时的记录,不过我清楚的记得我为Python实现所写的第一部分代码是一个简单的LL(1)剖析器产生器,我称之为“pgen。”。这个剖析器产生器仍是Python源代码的一部分,而且可能是所有Python源代码中改动最少的部分。这个Python的最早版本在1990年有几个CWI的用户,主要但不全是Amoeba组的。除我之外的关键开发人员是我的同事程序员Sjoerd Mullender(Sape的弟弟)和Jack Jansen(他在我离开CWI多年之后仍是负责Macintosh平台Python移植的领头开发人员之一)。

1991年2月20号,我第一次在alt.sources新闻组向外界发布了Python(21个uuencoded打包文件,要先合并在一起然后uudecoded解包为一个压缩的tar文件。)。这就是0.9.0版,发布采用的协议基本上照抄当时一个X11项目采用的MIT协议,只是改单位名称为“Stichting Mathematisch Centrum”,这是CWI的上级单位,以作为法律实体。就这样,如同我写过的所有代码那样,Python是开源软件,这要比Eric RaymondBruce Perens在1997年提出“开源软件”这个术语还早了。

立刻就收到许多反馈,在这种鼓励下我在接下来的几年一直持续的发布新版本。我开始使用CVS来跟踪代码变更和便于同Sjoerd、Jack交换代码。(恰巧,CVS最初是由Dick Grune设计的一套shell脚本组成,他是ABC组的一个早期成员。)我写了个一个FAQ,然后正如在有web之前时代FAQ的处理惯例那样周期性的张贴到一些新闻组,建立了一个邮件列表。comp.lang.python新闻组成立于1993年3月,此事我有鼓励但未亲自参与建立。新闻组和邮件列表通过一个双向网关连接起来。该双向网关至今仍工作,不过具体实现已是mailman的一个特性。mailman是开源邮件列表管理软件的首选,由Python语言实现。

1994年夏天,新闻组因为一个“如果Guido被公车撞了怎么办?”的线索而人声鼎沸。这个线索关注的是日益成长壮大的Python社区对我个人贡献的依赖关系问题。讨论在Michael McLay邀请我到NIST做两个月访问学者时达到顶点。 NIST是美国国家标准技术研究所,前身为国家标准局。位于马里兰州的盖瑟斯堡。Michael 有些NIST的“客人”对使用Python做一些和标准有关的项目感兴趣,也有预算资助我留下来,目的是帮助他们提高Python使用水平,也可以说是改进Python以符合他们的需求。

第一届Python研讨会于我呆在NIST的1994年11月召开,这要感谢NIST程序员Ken Manheimer提供的重要帮助与支持。大约有20个参会者,约半数人仍活跃在Python社区,有些人已经成为主要开源项目的领军人物(如Zope项目的Jim FultonGNU mailman项目的Barry Warsaw)。在NIST的支持下,我还在计算机系统协会(Usenix)的小语言会议上做主题发言,约有400人参会。会议在圣达菲召开,由Tom Christiansen组织,他是一个思想开明的Perl拥护者,在他的引荐下我见到了Perl的发明人Larry Wall和Tcl/TK的作者John Ousterhout

下集预告:我怎么在美国找到工作的……

没有评论: