加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

近看图灵碗 (一. 从苏黎世到巴黎) (上)

(2010-01-25 14:15:44)
标签:

杂谈

我们的旅程从世界花园瑞士开始,1958年5月27日,苏黎世过完了六鸣节,到处春暖花开。就在4年前的这个季节,图灵离开了人间。

这一天,一场8个人的讨论会将在苏黎世召开,没有花,没有酒,连个专门的会议名称都没有。会议桌的一边,是美国计算机学会(ACM)的4名代表,另 一边是德国应用数学和力学学会(GAMM)的4名代表,索性把地点和双方名称连起来,就叫苏黎世ACM-GAMM会议。后来的历史将会证明,这场毫不隆 重、甚至不太圆满的会议,改变了此后的计算机科学,特别是对于1922年成立的GAMM来说,这场会议几乎成了它唯一的光辉事迹。8名代表陆续抵达了苏黎世,他们将要在此讨论,规划一种新型的编程语言,叫作国际代数语言(IAL)。

在电子计算机刚刚出现时,想让它干活十分不容易,关键的问题就在于,计算机听不懂人类语言。既然没法让计算机说人话,人们只好使用机器语言跟它们沟通。

http://skylersun.info/wp-content/uploads/2009/12/Eniac-300x229.jpg(一. 从苏黎世到巴黎) (上)" />

左手是电线,右手是开关,这就是最早的机器语言(图为1946年的ENIAC计算机)。程序员先在纸上把程序设计好,然后进行持续数周的扳开关和接 电线的工作,读者如果做过数字电路的课程实验,就能体会到那是怎样的麻烦,万一哪根儿线断了,排查起来那就是恶梦的样板。后来,程序员们有了新方法,把程 序设计成打孔卡片(有孔没孔就是二进制),于是编程的主要工作变成了打孔,大家要是有兴趣,把自己身份证号码转成二进制,打在纸条上,看看是什么滋味。打 一个数尚属不易,打一个程序就不难想象了。再后来,冯诺伊曼提出的存储程序实现了,人们把程序像数据一样保存在机器里,随时调用,编程从这时起才正式变成 脑力劳动。但别高兴得太早,虽然不用接电线和打孔,但编程还是要用0101001111,就像《麦兜的故事》里面麦太太说的,鸡包纸包纸包鸡包鸡包纸包再 包鸡鸡鸡。这种程序,编的时候只有作者和上帝能看懂,过一阵子之后,恐怕只有上帝能看懂了。随后,人们把一些常用的指令用一些“助记符”来代替,有了 ADD、MOV这样的写法,形成了汇编语言,但本质上跟鸡包纸包鸡还是同一码事。

1953年,IBM公司的巴科斯(John Backus)再也忍不下去了,这哪里是编程,这不跟受刑一样么。他揭竿而起上书董事长,要为IBM704系列计算机开发一种新型编程语言。号称计算机之 父的冯诺伊曼当时是IBM的顾问,他坚决认为这个提议十分不靠谱,但也许是应了有心人天不负,董事长Hurd同意了这个计划。

http://skylersun.info/wp-content/uploads/2009/12/John_Backus.jpg(一. 从苏黎世到巴黎) (上)" />

巴科斯1924年出生在美国费城,他的父亲是一家火药公司的员工。巴科斯小时候不爱读书,勉勉强强混了个中学毕业,进入弗吉尼亚大学学习化学,成绩 依然很不好。二战爆发后,巴科斯参加了美国陆军,在Haverford学院(这可不是哈佛)接受医疗训练,准备治病救人,结果别人没救成,倒是发现自己长 了一个脑瘤,于是接受了手术。后来,巴科斯打算当一名无线电技术员,在训练过程中,突然对数学产生了极大的兴趣,于是进入哥伦比亚大学学习数学,于 1949年获得硕士学位,进入了IBM公司工作。

巴科斯开发新语言的提议得到了批准后,立即组建了一个开发小组,并担任组长,主持开发工作。1957年,第一套Fortran语言诞生了,尽管呱呱 坠地时哭声不响,第一次演示就出了编译错误,但还是坚强地活了下来。本文不是编程教材,对于Fortran的具体细节,就不过多叙述了,但是我们要记住这 个名字,因为它是非常耀眼的。Fortran是世界上第一个被正式应用的高级语言,所谓高级语言,是说它的语法更接近人类语言,而不是鸡包纸包鸡。从此以 后,程序员不必再背那些枯燥的机器码,只需用“IF (x > 0) THEN x = 0”这样的简单易懂的方式编程,可想而之它的推出让人多么兴奋。在电影《硅谷海盗》中,微软CEO鲍尔默讽刺说,要想激起比尔盖茨的性欲,必须这样叫 床:Oh!Fortran~Oh~For~~Tran~。直到如今,经过多年改进的Fortran仍然在计算机界占有一席之地,不知道知天命之年的 Fortran是否会记恨,当年冯诺伊曼差点把它掐死在摇篮里,戏剧的是,就在第一套Fortran诞生之前两个月,冯诺伊曼因癌症去世了。关于Fortran就先说到这里,尽管它光辉夺目,但对于本文来说,它只是配角。在上世纪 50年代末,编程语言的矛盾已经白热化,并非Fortran一己能够力挽狂澜。况且Fortran本身还有一个严重缺陷,它为IBM704而生,依赖特定 的机器型号,很难移植到别的机器上。革命尚未成功,同志仍需努力,在这个时候,ACM和GAMM都对编程语言有一些想法,于是他们决定坐在一起讨论讨论, 规划一种更好的语言。苏黎世讨论会就是在这样的背景下召开的。

Fortran语言之父巴科斯这回又没闲着,作为ACM的代表之一,他也来到了苏黎世,想再次参与锻造新刀。这次制定语言,主要有两个原则,第一点 毫无疑问,要使它更容易被人类理解,这是一直以来的革命方针;第二点,是要弥补Fortran的一些不足,主要是要具有通用性,兼容不同型号的机器。

讨论会开始了。由于只有8人,不必拘泥形式,再加上诸位代表都是理工背景,说起话来锱铢必较,这场讨论,注定激烈无比。

为了描述即将诞生的国际代数语言,巴科斯用他带着重重鼻音的费城口音,首先提出了一套用来描述语言的语言,称为巴科斯范式。我们知道,学英语的时 候,有一些“主+系+表”之类的句套子,对学习英语有很大帮助。对于计算机语言,也需要这样的句套子来描述它,巴科斯范式就是为了描述IAL而提出的。当 然这个范式并非这么简单,它也能描述其它编程语言,甚至一部分自然语言,是一套非常了不起的设计。

有了巴科斯范式,8名代表你一言我一语,将自己在设计语言方面的经验倾囊而出,开始制定国际代数语言的标准。正所谓众口难调,每个人都对自己心中的 新语言有着自己的观点,大家很快就陷入了争执,谁也不让谁,抢着用飞快的语速反驳对方,屋里的空气陷入了紧张,一个接一个的“IAL”、“IAL”、 “IAL”飘在空中,不停地游荡。这时,ACM小组的主席艾伦佩利(Alan Perlis)突然瞪着圆圆的眼睛大声说:停!你们难道没发现“IAL”这个词很绕嘴吗?

http://skylersun.info/wp-content/uploads/2009/12/perlis-231x300.gif(一. 从苏黎世到巴黎) (上)" />

佩利比巴科斯大两岁,1922年出生于美国匹兹堡,与巴科斯的家乡费城同在宾夕法尼亚州,俩人也算是半个老乡。佩利虽然出生在愚人节,但他一点儿也 不笨,比起巴科斯,佩利可算是年轻有为。无巧不成书,佩利初入大学时也是化学专业,他在21岁时,获得了卡内基理工学院的化学学士学位,这个学院就是现在 美国计算机专业排名第一的著名学府,卡内基梅隆大学。与巴科斯巧合的是,刚刚走出大学校园的佩利,看到满街都是征兵海报,看到山姆大叔紧盯着他说“I want you”,看到珍珠港事件后神经绷紧的美国,也选择了参军。更加惊人的巧合是,佩利也是在服役期间突然对数学产生了强烈兴趣,并转而攻读之。1950年, 他在麻省理工学院获得了博士学位。两年后他来到普渡大学,出任普渡大学计算中心首任主任,在普渡安装了IBM CPC计算机,并为其设计了一个叫作IT(Internal Translator)的编程语言。过了四年,这个毕业才6年的34岁年轻人,又一跃当上了卡内基理工学院第一任计算机科学系主任,为卡耐基配置了IBM 650,顺便把IT语言移植到650上。这些工作使佩利在程序语言的设计方面,有了许多经验和体会,所以在ACM成立这个程序设计语言委员会时,佩里坐上 了主席的位置。诸位读者,假如这个惊人的成长步伐让您吃惊,那您可要好好地适应一下了,在我们这个系列的文章中,比比皆是这样的天才人物,会让您脊背发 凉。

言归正传,我们刚才说到,佩利在讨论时,认为“IAL”这个词很绕嘴。假如他懂一点中文,没准还会发现,这个词一旦读快起来,很像汉语中的“哎 哟”。佩利扶了一下眼镜,继续说道:我想不明白为什么要起这么个名字,不但很绕嘴,而且狂妄自大,不就是个语言么,何必扯虎皮做大旗,叫什么“国际语 言”?佩利此言并无它意,然而他一心只顾着说,没有注意到身边的巴科斯此时已是脸红耳热,巴科斯所在的公司,早在1924年还在卖人口统计卡片的时候,就 “狂妄自大”地改名叫作国际商用机器公司。

尽管佩利认为IAL这个名字既绕嘴又狂妄,但其他代表却觉得这个名字好听又大气,再说这又不是什么要紧的事,何必在这上面浪费口舌。这件事情仿佛成 了插曲,直到五天后会议结束时,新语言的名字仍然是IAL,并写进了会议总结。也许这些代表怎么也没预料到,佩利在一年之后,还是执意改掉了这个名字,他 们更没预料到在多年之后,新的名称将以烫金大字铭刻在计算机科学的历史上,而IAL却鲜为人知。

取代“IAL”的新名字,叫作ALGOL。这是ALGOrithmic Language的缩写,即算法语言。后来Bauer强调说,ALGOL这个名字,是Bottenbruch最先提出的,这两位都是苏黎世讨论会的德国代表。

除了名字没有达成共识之外,最终大家对新语言的句法也没能统一意见,苏黎世ACM-GAMM会议带着许多未尽的争议,在1958年5月1日草草落下 了帷幕。然而,对于这些科学家来说,事实胜于一切雄辩,绝不能陷入驴子的困境。会议结束后,他们立即投入到实现新语言的工作中——既然分歧不能解决,那就 干脆两种都做出来再说。他们成立了一个ZMMD小组,旨在开发一种ALGOL语言的编译器,ZMMD这个名称的由来,是其几位组员以及他们使用的一台 Z22计算机分别所在的四个城市的开头字母。

请计算机专业的读者们在此稍息片刻,容我给其它专业的读者稍微解释一下什么是编译器。前面我们说过,因为计算机没法理解人类语言,我们需要用机器指 令来编写程序,我们现在有了高级编程语言,不必使用麻烦的机器指令,这并不是因为计算机学会了人类语言,而是因为我们请了一位翻译。简单地说,它能够把高 级语言翻译成机器指令,既使我们不用再做那些机械劳动,也能满足机器们的冰冷胃口,这个翻译就是编译器,它本身也是一套程序。好了,大家回回神,继续我们 的故事。

就在不久之后的1958年年底,欧洲的冬天到来了,世界各地的游客纷纷来到壮丽的阿尔卑斯山,体验激动人心的滑雪运动。就在这个冬天,在ZMMD小 组的努力下,第一套ALGOL语言及其编译器成功地开发出来了,按照年份,命名为ALGOL58。好玩的是,ALGOL58有三种不同版本的语法,在实际 编程和书面表达时写法是不同的,有点像汉语分白话文和文言文,其差异之大,连小数点的写法都不一样。由于巴科斯的参与,ALGOL58既继承了 Fortran的许多优点,又弥补了Fortran的许多不足,一度使Fortran的地位面临着严竣的挑战。这里我们不详细介绍ALGOL58的样子, 它的生命实在太短暂,很快就退出了历史舞台。因为,就在一年多以后,ALGOL58的创造者,包括巴科斯和佩利等,对这种新语言有了许多新的体会和感受。 1960年1 月,他们召集了其他几位参与ALGOL工作的计算机科学家,来到了浪漫之都巴黎,再次召开了一场关于ALGOL语言的研讨会。

(未完待续)

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有