翻译Python历史:微软于1996年发布Python代码 19 February, 2009 (14:15) |
Translate |
No comments This post a a Chinese translation of Greg Stein’s article “Microsoft Ships Python Code… in 1996” on a blog named “The History of Python”, which is started by Guido van Rossum. 原文地址:http://python-history.blogspot.com/2009/01/microsoft-ships-python-code-in-1996.html 非常感谢Guido让我分享我自己关于Python的历史! 我把我对Python的介绍放在另一篇文章里,结尾介绍了我们几个人在1991年的开始。那时我们在制作一个大型的处理B2C电子商务的客户端/服务器系统。客户TCP协议运行在旧的X.25网络上,是非常旧时代的东西了。 在1995年,我们认识到,与我们过去所相信的相冲突的,越来越多的客户实际上是联网的,我们需要给我们的客户(计算机销售商)提供一个系统可以访问连接到互联网上的客户。 我们的第一个问题就是要转换到一个完全基于浏览器的环境。我们的客户端不再使用了,所以我们要给客户们提供一个新的购物体验,而且服务器的基础结构 要提供支持。那时,控制一个网络浏览器意味着为Apache和Netscape的HTTP服务器编写CGI脚本。通过CGI,我连接到我们已有的服务器后 端来处理订单、维护购物篮、以及抓取商品信息。这些CGI脚本生成纯的、vanilla HTML(1995年还没有AJAX!)。 这项计划非常不理想,因为每一个请求花费很长时间来生成一个新的CGI进程。反应能力非常弱。因此,在1995年十二月,当我参加在华盛顿特区举办 的Python研讨会时,我(从Digital Creations,最了解Zope的人)那里得知了一些Apache和Netscape模块在服务器进程运行的比较稳定。这些模块使用一个名为ILU的 RPC系统来与后端的一直运行的进程交互。把这个系统替换进去后,CGI派生的高额开销就解决了,而且购物体验相当舒适!我们开始把原型转换成实际的代 码。随着我们的投入,我们的系统看上去越完善,而且有更多的人加入这个项目。以后几个月的开发变得非常迅速(感谢Python!)。 在1996年一月,微软敲了我们的门。他们内部的电子商务系统的开发不断失败,他们需要一些懂得行业(那时我们做电子商务已经好几年了)而且聪明的人。当谈判开始时,我们在整个春天继续开发软件,在1996年六月完成了工作。 当我们带着我们的短小的Python代码到了微软,我们要完成如何把产品发布到Windows NT上。我们加入的小组里有很多Windows经验,我们制作了一个IIS插件通过管道来与嵌入我们的Python服务代码的后端NT服务器进行交互。经 过从七月开始的疯狂冲刺,我们在1996年十月发布了微软商业服务器1.0版本(Microsoft Merchant Server 1.0)。 是的,如果你把外面的封装解开,隐藏在系统下面的,是一个Python解释器、一些扩展DLL文件、以及一堆.pyc文件。微软当然没有宣传这一点,但如果你知道从哪里寻找的话,它们确实在那里。 翻译Python历史:个人历史 - 第二部分,CNRI和之后 27 January, 2009 (21:16) |
Translate |
No comments This post a a Chinese translation of Guido van Rossums’s article “Personal History - part 2, CNRI and beyond” on his blog named “The History of Python”. 原文地址:http://python-history.blogspot.com/2009/01/personal-history-part-2-cnri-and-beyond.html Python研讨会(参看之前的文章)的结果是一份在CNRI(the Corporation for National Research Initiatives,国家研究研发公司)的工作。CNRI是位于维珍尼亚州来斯顿的一个非盈利的研究实验室。我在1995年四月份加入。CNRI的主 管Bob Kahn是第一位向我指出Python与Lisp之间共同点的人,尽管两者从外表(语法)上完全不同。在CNRI,DARPA授权的移动媒介研究间接的给 Python工作提供经济支持。尽管有DARPA支持的项目在使用Python,但没有太多对编程语言本身的直接支持。 在CNRI,我领导并帮助雇佣了一个小的开发小组来用纯的Python语言开发一个移动媒介系统。最初的小组成员是Roger Masse和Barry Warsaw,他们在NIST的Python研讨会上指出Python的bug。另外,我们还雇佣了Python社区的成员Ken Manheimer和Fred Drake。MIT的毕业生Jeremy Hylton原本是被雇佣来做文本检索工作的,也加入了团队。最初团队由Ted Strollo和Al Vezza管理。 这个团队帮助我创建和管理了另外的Python社区的基础,比如python.org站点,CVS服务器和不同的Python特殊兴趣小组的邮件列表。Python的1.3到1.6版本都出自CNRI。在很多年里Python 1.5.2版本是最流行和最稳定的版本。 GNU mailman也在这里诞生:我们最早用一个叫Majordomo的Perl工具,但Ken Manheimer发现它不容易管理,于是就找一个Python方案。他找到John Viega写的一些东西并接手管理。当Ken离开CNRI去了Digital Creations,Barry Warsaw接手了它,并说服了自由软件基金会(Free Software Foundation)采用它作为官方的邮件列表工具。因此Barry把它按照GPL(GNU Public Licence)许可发行。 Python研讨会仍然继续着。开始是一年两次,但由于工作量呈指数性的增长,它编程了年会。最初这些研讨会是自愿组织的,就像NIST(第一 次),USGS(第二次和第三次),以及LLNL(第四次,并且开始了年度系列)。最终CNRI接手了组织任务,后来(和WWW及IETF会议一起)这些 成为了Fortec商业行为的副产品。很快的参与人数达到了数百人。当我离开CNRI后一段时间后Fortec逐渐消失,全球Python会议成为了 O’Reilly开源会议(OSCON)的一部分,但同时Python软件基金会(Python Software Foundation,见下)开始了一个名为PyCon的新的草根研讨会。 我们也在CNRI建立了第一个Python周边协会。为了回应Mike McLay和Paul Everitt创建一个后来结束在法规起草流沙中的“Python基金会”的努力,Bob Kahn出钱成立了“Python软件行动”(Python Software […] 翻译Python历史:个人历史 - 第一部分,CWI 20 January, 2009 (21:28) |
Translate |
No comments This post a a Chinese translation of Guido van Rossums’s article “Personal History - part 1, CWI” on his blog named “The History of Python”. 原文地址:http://python-history.blogspot.com/2009/01/personal-history-part-1-cwi.html Python的早期开发始于位于阿姆斯特丹的一个名为CWI的研究机构。CWI是Centre for Mathematics and Computer Science的荷兰语拼写的首字母。CWI是个有趣的地方,它接受荷兰政府的教育部门和其它研究拨款,做学术等级的计算机科学和数学研究。任何时间那里 都有很多博士生,老辈的人或许还能记得它的原始名称:数学中心。在这个名字下,最有名的发明或许就是Algol 68了。 1982年晚期我大学毕业后开始在CWI工作,在Lambert Meertens和Steven Pemberton领导的ABC小组当程序员。四、五年后ABC项目被终止,因为它缺乏显著的成就。然后我又到了Sape Mullender领导的CWI的Amoeba小组。Amoeba是一个基于微内核分布式系统,由CWI和阿姆斯特丹VU大学联合开发,由Andrew Tanenbaum领导。1991年Sape离开CWI去Twente大学当教授,我结束了CWI的由Dick Bulterman领导的一个新生多媒体小组的工作。 Python是我在CWI的一个直接产品。正如我将会在后面介绍的那样,ABC给了我Python的关键灵感、Amoeba给了我马上的动力、多媒 体组让它成长。然而,就我所知,没有任何一笔CWI的基金是正式赞助Python的。事实上,Python仅仅是Amoeba和多媒体小组的一个重要工 具。 我最初想创建Python的动机是Amoeba项目需要一个高级语言。我意识到用C语言来开发系统管理工具太费时间了。而且,在Bourne shell下做这个不能保证在其它的shell下也能正常工作。最重要的是作为一个完全新设计的分布式微内核系统,Amoeba的原子操作和其它能运行 Bourne shell的传统操作系统相比是非常不同(而且更出色)的。所以我们需要一个语言来作为“C语言和shell之间的桥梁”。很长一段时间里,这就是 Python的主要任务。 在这一点上,你或许会问“为什么不移植到已经存在的语言上?”我的观点是,那个时候没有许多合适的语言。我比较熟悉Perl 3,但它与UNIX的联系比与Bourne shell还要紧密。我也不喜欢Perl的语法──我对编程语言的口味受Algol 60样式的语言比如Pascal、Algol 68(都是我早期学的语言)和ABC这个我花费了生命中四年时间的语言影响很大。所以我决定设计一门我自己的新语言,借鉴所有ABC中我喜欢的东西并且修 正我意识到的所有问题。 我第一个决定修正的是名字!就像事实那样,ABC小组没有给他们的语言取好名字。他们最初的名字是B,后来被放弃,因为会和另一个也叫B的语言混 淆,而且那个B更古老,也更有名的。无论如何,B代表只是一个意义上的工作标题(这是一个玩笑,B是包含语言名字的变量名称,因此用斜体)。小组曾经举办 过一个公开竞赛来征一个新名字,但没有一个是满意的。最后选用了内部的备用方案。这个名字想传达一个让语言和字母表一样简单的想法,但它从来没有让我感到 信服。 所以,没有在上面分析名字问题,我决定在下面分析它。我选择了第一个想到的名字,从Monty Python’s Flying Circus来的,那是我最喜欢的喜剧演出之一。这点引用让我感觉非常适合一个“实验项目”。“Python”一词也是一个好记的不错的名字,而且也适合 用名人命名语言的传统,就像Pascal、Ada、Eiffel那样。Monty Python团队或许在科技人群中不那么著名,但他们是极客们的最爱。它也同样适合CWI的传统──Amoeba小组用电视节目的名字来命名语言。 很多年我都抵抗住要把语言和蛇联系起来的诱惑。当O’Reilly想在他们的第一本关于Python的书《Programming Python》的封面上放上一条蛇的时候,我最终放弃了。用动物图像做书籍封面是O’Reilly的传统,如果要在Python的书的封面上印上动物,蛇 是最合适的了。 决定了名称后,我于1989年十二月末开始了Python的工作,在1990年的头几个月有了一个可以运行的版本。我没有记笔记,但我清楚的记得我 为Python写的第一份代码是一个我称作“pgen”的简单的LL(1)语法分析生成器。这个语法分析生成器仍然是Python代码的一部分,而且或许 是所有代码中需要修改的最后一部分。Python的早期版本被CWI的一群人使用,但在1990年时还仅限于Amoeba小组内部。除我之外的核心开发者 是我的同事Sjoerd Mullerder(Sape的弟弟)和Jack Jansen(在我离开CWI多年后他仍然领导Macintosh移植的开发)。 在1991年二月20日,我第一次通过alt.sources新闻组向世界发布了Python(我用uuencode分成21个包发布然后用户要用 uudecode来合并成一个压缩的tar文件)。这个版本被标记为0.9.0,几乎是原字照抄了当时MIT给X11项目用的许可证,署名 “Stichting Mathematisch Centrum”(CWI的上级组织)作为法律实体。所以,就像我写的其它东西一样,Python在Eric Raymond和Bruce Perens在1997年末推广“开源”一词之前就开源了。 当时立刻就有了很多回复。在这些回复的鼓励下,我在后几年定期的发布新版本。我开始使用CVS来跟踪更新和更容易的管理Sjoerd和Jack贡献 的的代码(CVS最初是Dick Grune开发成一组shell脚本,他是ABC小组的早期成员)。我写了FAQ,定期发布到某个新闻组,来回答在web上常见的问题,并建立了邮件列 表。1993年三月comp.lang.python在我的鼓励下建立了,但不是我亲自参与的。新闻组和邮件列表通过现在还在的一个双向网关联系在一起, 尽管现在是mailman的一个功能了──mailman是一个优秀的开源邮件列表管理器,它本身也是用Python写的。 在1994年夏天,新闻组上的一篇名为“如果Guido被车撞了”的文章引起了关于成长中的Python社区对我本人贡献的依赖的讨论。讨论以Michael McLay邀请我到NIST做两个月的客座研究院而告终。NIST是the […] 翻译Python历史:Python的简要时间表 20 January, 2009 (17:34) |
Translate |
No comments This post is a Chinese translation of Guido van Rossum’s article “A Brief Timeline of Python”. 原文地址:http://python-history.blogspot.com/2009/01/brief-timeline-of-python.html Python的开发和流行是和许多其它的动态(和开源)编程语言如Tcl、Perl和后来的Ruby的同时代的。为了给Python一个更好的历史看法,下面这张表展示了Python的发布历史。在早期我没有严格的记录每件事,因此那时的日期并不精确。 发布日期 版本 December, 1989 开始实现 1990 CWI里内部发行 February 20, 1991 0.9.0 (发布到alt.sources) February, 1991 0.9.1 Autumn, 1991 0.9.2 December 24, 1991 0.9.4 January 2, 1992 0.9.5 (只在Macintosh上) April 6, 1992 0.9.6 Unknown, 1992 0.9.7beta January 9, 1993 0.9.8 July 29, 1993 0.9.9 January 26, 1994 1.0.0 February 15, 1994 1.0.2 May 4, 1994 1.0.3 July 14, 1994 1.0.4 October 11, 1994 1.1 November 10, 1994 1.1.1 April 13, 1995 1.2 October 13, 1995 1.3 October 25, 1996 1.4 January 3, 1998 1.5 October 31, […] 翻译Python历史:介绍与概述 16 January, 2009 (22:26) |
Translate |
No comments This post is for translating an article named “Python’s Design Philosophy” by Guido van Rossum. 原文地址:http://python-history.blogspot.com/2009/01/introduction-and-overview.html 介绍 Python是目前最流行的几种动态编程语言(包括Perl、Tcl、PHP,以及新成员Ruby)之一。尽管它经常被认为是一门“脚本式”语言, 但它确实是一门通用的编程语言,就像Lisp和Smalltalk以及其它语言一样。在今天,Python被用于从用一次就扔到的脚本到提供24×7小时 不间断服务的大型服务器的各个领域中。它被用于GUI和数据库编程、客户端和服务器端的网络编程,以及程序测试。它既被科学家用来给世界上最快的超级电脑 写程序,也被儿童用来学习编程。 在这个blog里,我将把焦点放在Python的历史上。特别是关于Python语言如何被开发、设计上的主要影响,犯的错误、学到的教训、以及未来的方向。 鸣谢:我欠了Dave Beazley很多这个blog的好的句子。(关于这个blog的更多的起源,请看我的另一个blog。) 鸟瞰Python 当人们第一次看Python时,他们常常对于代码的样子感到冲击,至少从表面上来看,很像常规的程序设计语言,比方C或Pascal。这并不是意外 ──Python从C上借鉴了很多语法。例如,许多Python的关键字(if、else、while、for等等)和C一模一样;Python的标识符 和C有着同样的命名规则;大多数的基础操作符和C有着相同的含义。当然,很明显Python并不是C,一个主要的不同就是Python不是用括号而是用缩 进来分组语句。例如,不是像C一样这样写语句 if (a < b) { max = b; } else { max = a; } Python完全抛弃了括号(同样抛弃了句尾的分号)并且使用如下的结构 if a < b: max = b else: max = a 其它Python和C样式的语言的不同是它使用动态类型绑定。在C中,变量永远必须被显式的定义像成某些特定的类型,比如说int或double。 这个信息被用在进行程序的静态的编译期检查和分配用来存储变量值的内存地址。在Python中,变量只是简单的只想对象的名字。变量不需要在赋值前被定 义,而且它们甚至可以在程序运行中间改变类型。像其它动态语言一样,所有的类型检查都是解释器在运行的时候进行的,而不是在每次的编译的时候。 Python的基本内建数据类新有布尔、数值(机器整数、任意精度的整数、以及实数和复数类型的浮点数),和字符串(8比特和Unicode)。这 些都是不可变的类型,意思是他们是用创建后就不能改动的对象描述的。内建的复合数据类型包括元组(不可变的数组)、序列(可以改变体积的数组)和字典(哈 希表)。 Python通过支持包(一组模块和/或包)、模块、类、方法和函数来组织程序。它提供if/else、while和可以循环所有“可迭代的”对象 高级for语句来控制程序流程。错误处理方面,Python使用了(不可恢复的)异常。一条语句抛出了一个异常,try/except/finally语 句来指定如何处理这个异常。当错误发生时,内建的操作就会抛出异常。 在Python中,所有可以被命名的对象都被称为“first class”。这意味着函数、类、方法、模块和所有其它的有名字的对象都可以在运行的时候被任意的传来传去、检查、并放在不同的数据结构(例如序列或字 典)里。而且谈到对象,Python也有对面向对象编程,包括用户定义的类、继承、和运行期方法绑定的全面支持。 Python有多方面的标准库,是它能够流行的主要原因。标准库有超过100个模块而且还在继续增长中。这些模块包括正则表达式配对、标准数学函 数、线程、操作系统接口、网络编程、标准互联网协议(HTTP、FTP、SMTP等等)、电子邮件处理、XML处理、HTML解析和GUI工具箱 (Tcl/Tk)。 此外,还有数量相当庞大的第三方提供的模块和包,其中多数是开源的。其中有网络框架(要列出来就太多了)、更多的GUI工具箱、高效率数值库(包括 对许多流行的Fortran包的封装)、关系型数据库接口(Oracle、MySQL和一些其它的)、SWIG(可以让任意C++库编程Python可使 用的模块的工具)和更多。 Python(和其它动态编程语言)的一个主要的吸引力是看上去复杂的任务通常可以用非常短的代码表达。举例来说,这是一段简单的Python脚本,它抓取一个网页、扫描它并获取URL地址,然后输出其中的前10个: # Scan the web looking for references import re import urllib regex = re.compile(r’href=”([^”]+)”’) def […] 翻译Python历史:Python的设计哲学 16 January, 2009 (17:58) |
Translate |
No comments 从LinuxToy上看到了Python的作者开blog写史的消息,马上进去看看,发现现在一共有两篇文章。因此想到现在做一个粗略的翻译可能会 对中文读者有帮助,就抽了点时间翻译了其中的第二篇文章。我翻译的很不正规、也很不严谨。但对于不想做Python历史学家的普通读者应该能看通大略意 思。 This post is for translating an article named “Python’s Design Philosophy” by Guido van Rossum. 原文地址:http://python-history.blogspot.com/2009/01/pythons-design-philosophy.html 后面的blog文章会讨论Python历史的(血淋淋的)细节。然而在那之前,我想详细的说一下在我设计和实现Python时帮助我做出决定的哲学上的指导方针。 首先,Python最初是被构思成一个个人的“实验”项目──没有官方预算,我希望能很快得到结果,以便说服我的老板支持这个项目(我做的相当成功)。这样产生了一些节省时间的规则: 从任何可以的地方借鉴思想。 “任务应当尽可能简单的完成。”(爱因斯坦) 做好一件事(“UNIX哲学”)。 别过于担心效率──在最后需要的时候再优化。 不要随大流。 不要试图做到最好因为“足够好”就足够了。 (因此)抄近路是可行的,特别是当你可以在将来再完善。 其它的原则不是为了节省时间。有时它们反而是恰恰相反的。 Python的实现不应当限制在一个平台上。部分功能可以不跨平台,但核心一定要可以随处工作。 不要用机器可以处理的细节去打扰用户(我不总是遵守这点,后面的章节会讲一些惨痛的后果)。 支持、鼓励平台无关的用户代码,但不要切断访问平台特性的功能(这点与Java完全不同)。 […] |