科技: 人物 企业 技术 IT业 TMT
科普: 自然 科学 科幻 宇宙 科学家
通信: 历史 技术 手机 词典 3G馆
索引: 分类 推荐 专题 热点 排行榜
互联网: 广告 营销 政务 游戏 google
新媒体: 社交 博客 学者 人物 传播学
新思想: 网站 新书 新知 新词 思想家
图书馆: 文化 商业 管理 经济 期刊
网络文化: 社会 红人 黑客 治理 亚文化
创业百科: VC 词典 指南 案例 创业史
前沿科技: 清洁 绿色 纳米 生物 环保
知识产权: 盗版 共享 学人 法规 著作
用户名: 密码: 注册 忘记密码?
    创建新词条

最新历史版本 :约翰·巴库斯 返回词条

  • 编辑时间: 历史版本编辑者:方兴东
  • 内容长度:图片数:目录数:
  • 修改原因:

约翰·巴库斯(John Backus):FORTRAN之父

主要成就:如今的计算机之所以如此简单、易用,在许多方面与约翰·巴库斯的发明有关,他在三项重大的发明中扮演了主角:第一个高级程序设计语言FORTRAN;为高级语言提供描述语法规则方法的巴库斯—诺尔范式;以及一种称为FP(功能编程)的函数程序设计语言。1976年,巴库斯获国家科学勋章,1993年获Draper工程奖

(图)John BackusJohn Backus

姓名(中文) 约翰·巴库斯

姓名(英文) John Backus

出生年月 1924年12月3日 – 2007年3月17日
出生国家、地点 美国费城

教育背景 1949年,哥伦比亚大学基础学院数学学士学位
1945年3月,进入纽约第五大街医科学校
第二学期因不好好学习被校方开除
1942年,进入弗吉尼亚大学

职业背景 1991年,巴库斯退休

1949年,受聘为IBM计算机中心SSEC

计算器工作就像人类的语言有其最基本的单位--语素一样,电脑的语素就是0和1,人类可以把指称万事万物的符号变为0和1的组合形式。让电脑去“思维”。这一0和1又称为机器代码,是居最底层的。再上一层是加、减、乘、除等等算术命令和控制这些运算的命令。这些命令简称为指令。这些指令的集合就是汇编语言。不同的机器有不同的汇编语言,就像每个民族有不同的文字一样。再高一层,就是高级语言,如我们熟悉的BASIC、FORTRAN。联系高级语言汇编语言的是编译器。指令是操纵电脑运行的信号,通过一个或多个相关的逻辑组合,形成适合电脑处理的指令序列,就是程序。程序的综合就是软件。如果说集成电路是电脑的“脑髓”,那么,软件就是电脑赖以思维的语言。而指令是电脑语言的语句,程序就是用这些电脑语句按一定的语法书写的语句的集合。熟练运用这些语句并符合语法则成了我们常说的编程。没有语法或不符合语法,我们简直无法交流,同样,没有程序的电脑只是一台停止转动的机器,错误的程序更会使电脑发生致命的错误。

目录

[显示全部]

不学无术回目录

如今的计算机之所以如此简单、易用,在许多方面与约翰•巴库斯的发明有关,他在三项重大的发明中扮演了主角:第一个高级程序设计语言FORTRAN;为高级语言提供描述语法规则方法的巴库斯—诺尔范式;以及一种称为FP(功能编程)的函数程序设计语言。这些发明并没有什么奇特的。“我们并不知道我们想要什么和怎样去做。这只是顺其自然的事。……现在看来,当时我们做的是极其笨拙的。”

1924年,巴库斯出生于费城。父亲在火药公司从普通员工升到了首席化学家的高职。一次大战期间,老巴库斯曾为军火官员,后改做证券经纪人。因此等巴库斯降世时,父亲早已在战后的繁荣中发了财,使巴库斯从小衣来伸手,饭来张口。他在特拉华州的威尔明顿(Wilmington)度过了童年,然后就读于宾夕法尼亚洲波茨敦市很有名望的希尔学校。但当时的巴库斯就像一个不学无术的小混混。“我年年不及格,从未学习过。我讨厌学习,只是到处走来走去打发时间。”这样的生活十分压抑,唯一的乐趣就是:“每年我都去新罕布什尔州的暑期学校,夏日里可以去划船,度过美好的时光。”

1942年,巴库斯总算艰难地毕业了,上了弗吉

(图)John BackusJohn Backus

尼亚大学。父亲希望他子承父业,劝他学化学。巴库斯到是挺喜欢化学世界神奇的理论知识,但却讨厌实验室。他将大部分时间泡在舞会上,等着被征兵入伍。到第二学期末,干脆每周只上一堂课,还是轻松的音乐欣赏课。最后,校方将他开除了。1943年,巴库斯就参了军,成了一名下士,在乔治亚州的斯图沃特堡率领一个防空小队。一次能力倾向测试差点改变了他的人生方向,军方准备送他到匹兹堡大学学习工程预科课程。但随后的一次医科能力测试又改变了方向,将他送到哈佛富德学院学习医学预科。而他的战友们全都送到了美军和德军交火的战场上。

学习期间,巴库斯到大西洋市医院的神经外科病房护理重伤员。一次偶然机会,他被诊断出脑袋上有脑瘤,于是他的头内装进了一块金属板。

1945年3月,巴库斯进入纽约第五大街医科学校,但很快又厌倦了。“医科学校的人不喜欢思考。他们只会背书,那是他们需要你做的全部,你不需要去思考。”于是只熬了9个月,巴库斯就呆不住了。1946年,他结束了军队生涯。

巴库斯发现自己脑袋里的那块金属板老是不对劲,就干脆找到技术员并自己动手设计了一个。这是巴库斯对自己大脑的大胆改造。多年后,巴库斯开始为电脑进行改善。

为计算机服务回目录

从此,巴库斯便再也没做过医学方面的工作。他在纽约租下一套每月18美元的小公寓,陷入了茫然。“我的确不知道自己到底想做什么。我觉得自己想要的只是一套高保真音响,因为我喜欢音乐。”

但那时还没有这种东西,于是巴库斯就到一所无线电技术学校学习,结果遇到了第一位好老师,他与巴库斯合作为一家杂志计算放大电路曲线的特性,这是一件乏味又烦人的工作。但偏偏使巴库斯发现了数学的魅力,是他一下子感到数学应用的乐趣。

(图)John BackusJohn Backus

于是,再度调转枪口,到哥伦比亚大学基础学院注册学习数学课程。对数学他也有好恶之分,不喜欢微积分,但喜欢代数。1949年,25岁的巴库斯差几个月就可拿到数学学士学位了。

一个晚上,他参观了IBM公司曼迪逊大街的计算机中心,瞻仰了一番IBM早期的电子(真空管)机器SSEC。参观过程中,他告诉导游自己正在找工作,导游鼓励他去找主管谈谈。“我说算了。我看上去又散又乱,但她一再鼓励,我便去了,作了一次测试便通过了。”

巴库斯受聘为SSEC计算器工作,这个庞然大物现在看来还不算是真正的计算机。它没有存储软件的存储器,程序必须通过穿孔纸带输入。由成千上万个电动机械部件组成,不但运行缓慢,而且很不可靠。巴库斯必须时时守在旁边,“因为这家伙每3分钟便会停止运行或出错。你必须设法让它重新运行。”当然,最难的就是为这笨家伙编写程序。

巴库斯就像SSEC计算器的外设,整整工作了3年,这台不能存储数据的计算器,最终被IBM抛弃了,但巴库斯却从中学到了很多东西,这段时间他的最大贡献就是开发了“快速编码”(Speedcoding)程序,以解决小机器无法计算大数字的问题。但巴库斯也初尝了编程的滋味。“程序设计之所以如此昂贵,是因为必须雇佣很多程序员用‘汇编’编程。汇编语言消耗大量时间,而且调试大量出现的错误也是一件非常费力的工作。”

FORTRAN诞生回目录

早期电脑语言的原始,的确带来很多的麻烦,让用户们头痛不已,连声抱怨,对常人来说简直如巫术和咒语。这已严重影响电脑商业化的进展。1952年春,IBM在推出IBM 701型电脑时,在设计思想上和“马克3号”机相仿。IBM 701的内存在当时很可观,用威廉姆斯管做主存储器,内存有4096个36位字长的字,能包含33种不同类型的指令,每一个程序的指令肯定不亚于4000条。当时IBM最快的打印机,每分钟能打150行,算起来,光打印一个程序就要花半个多小时,更不用说来读它们了。而且还要经常出错。

(图)IBM 701IBM 701

巴库斯开始考虑:“一台机器能否充分有效地把一种数学语言转换成日常经济的程序,同时使整件事的成本降

低?”他认为更主要的挑战是设计转换器而不是设计语言本身。当时他对进行的整个编程工作失去信心,为技术不能突破而苦恼。同时他更清醒地意识到程序员本身也阻碍了技术的进步。

回忆当时的情形,巴库斯后来在1980年写道:“现在的程序员常常受到上级的压力,他们只知道程序怎么写,要写多长。工作不再是一份神秘的艺术,创造力也是从一本枯燥、奇怪的编程和操作系统手册里寻找出来的。而在50年代初期,编程是一门黑色艺术。一般的编程原理不存在,每个问题都需要独立去解决,神秘性取决于程序员个人,一个程序的成功与否主要依赖于程序员自身的技术水平和创造力。”那时,程序员没有太多的耐心,不能坚持到将一种想法完全开发出来或完全写下来。如何改变编程低效率的现状,如何摆脱汇编语言的束缚,成了巴库斯思考的中心。

1953年12月,巴库斯给他在IBM公司的老板斯伯特•赫德写了一份备忘录,建议为IBM 704机设计一种新的程序设计语言,实用性更强的高级程序语言,这就是后来的公式式翻译语言——FORTRAN。

但巴库斯却受到了电脑之父冯•诺伊曼的强烈反对,当时他是IBM公司的顾问,冯•诺伊曼并不认为程序语言是个大问题。实际上,他对程序设计的费用不了解,因此认为FORTRAN是个浪费。但赫德还是批准了这个计划。巴库斯找了几个有经验的程序员和刚毕业的年轻数学家。他们几乎一半的工作是为了生成效率更高的机器码。巴库斯的工作室设在麦迪逊大街590号IBM总部附近一个大厦里。后来,他们搬得离IBM更近,就在麦迪逊590号附楼19层的一个房间。巴库斯的同事们也越来越多,像后来做出突出贡献的数学家和专业打字员罗伯特•A•尼尔森。而当时参与进来的路易斯•海伯特刚刚从数学专业毕业,他对计算机唯一的认识就是它们存在着。

推广比发明更重要回目录

尽管,当时的FORTRAN项目组从来没有想过他们的编程语言会应用在IBM704以外的计算机上,他们还是斗志昂扬。因为他们知道,如果他们成功了,能设计出更可靠的编程方法,能使IBM704更快、更经济地运转,就能够引起业界相当的震动,甚至对整个计算机界产生巨大影响也不是不可能的。

(图)John BackusJohn Backus

他们首先要给这种语言命名,结果发现在漫长的日子里逐一考虑合适的名字是个很有意思的消遣。巴库斯一些比较好的老名字,但却一一被同事否定了。有一天他提议用程式转换——FORTRAN,大家对它反应冷淡,但没有人来否定它。名字就这么定下来了,有总比没有要强。在项目组正式运转后,每当有人询问何时能完成,他们总是给予相同的回答:6个月,6个月就好了。他们真诚地相信这个项目到那时就会结束。但实际上它花了三年时间。

在FORTRAN项目组内,没有等级制度,大家被共同的心愿连接起来,工作氛围极其振奋。巴库斯说,大家都有提出新问题,探讨新问题的愿望,哪怕最后结果是一条死胡同,也不妨碍他们继续探讨和提出新的问题。他们并不是进行语言的设计,而是进行生成有效程序汇编语言的设计。他们一边开发,一边创造语言,希望生成一个在编程时可以更方便使用的程序。

1954年秋天,巴库斯已经成为FORTRAN项目组的管理者。11月10日,他们发表了第一篇论文《FORTRAN初期报告——用于IBM机器惯用转换系统》。他们在第一份报告中流露出乐观的情绪。FORTRAN可以提供解决问题编码的繁杂技术,这是人类本身从愿望上无法实现的。

1954年末,巴库斯对订购IBM 704的客户进行了6场关于FORTRAN的报告。主要是向用户解释FORTRAN并听取他们的意见。用户们并没有提出什么意见,当时编译器还无法完成,他们不相信真的会有汇编语言制作出来,并能生成有效的目标程序。没有反馈,没有建议,没有批评,这就是听众们的反映。

(图)IBM 704IBM 704

1957年4月,西屋电气公司幸运地成为FORTRAN的第一个商业用户。FORTRAN的第一个应用程序运行正常,但不久便发现编辑器中有大量的错误。巴库斯小组又花了6个月进行修改。

巴库斯领导这个杰出的小组,极耗费精力地努力了整整4年,但他很谦虚地说:“我替那么多人收获了如此众多的荣誉,看起来很不公平,是大家创造了FORTRAN语言。我的主要职能只是午餐后开始进行象棋比赛,让大家下午两点继续工作。”

    FORTRAN有三大类共49个基本字符,包括26个英文大写字母、10个阿拉伯数字以及其他专用符号,主要由算术、控制、不可执行和输入输出四种语句组成,其优点是标准化程度高、便于程序互换、计算速度快等。FORTRAN语言非常适合于解决工程技术和科学计算问题,其表达式也与通常数学形式相似,是早期工程技术和科学计算的专用语言。

FORTRAN使电脑语言走出原始蒙昧的状态,在软件史上,有着凿混沌开天地的意义。这也使以程序编写为核心的软件成为一种产业的肇始。当然,FORTRAN的成功也不全是IBM一家之力,巴库斯是在韦勒和格莱斯•霍普基础上取得突破性进展的,格莱斯在“尤尼法克”(UNIVAC)上开发Flow-Matic语言中,类似英语的语句和字母的形式就被吸收,韦勒在“爱达赛客”(EDSAC)上开发的“子程序跳跃”和“初始化指令”更对FORTRAN有直接的推动。  

再接再厉 回目录

    FORTRAN语言是最早和最通用的电脑高级语言之一,从1957年开始,广泛使用,成为当时科技界的“福音书”,对当时的火箭、导弹、人造地球卫星等宇航技术的发展有深巨的影响。尤其是“阿波罗”登月计划中,人们都知道电脑做了很大的贡献,若要细细论功,则有两位,一是德州仪器公司的集成电路,再是IBM的FORTRAN语言。因此,FORTRAN语言使电脑的工业应用成为可能,是推动二战以后西方工业经济奇迹复苏和进入第二次工业革命的无形力量,有人称之为“看不见的蒸汽机”。

(图)John BackusJohn Backus

巴库斯50年代末才停止FORTRAN的工作,但他对程序设计的贡献却刚刚开始。

1958年5月,国际商业和学术计算机科学家委员会在苏黎世召开大会,目标是改进FORTRAN,并设计一种单一的标准化的计算机语言,这就是Algol。Algol克服了FORTRAN的一些弱点。巴库斯喜欢Alogl中蕴含的思想,但对如此清晰表达感到困难。为解决这个问题,巴库斯使用了上下文无关文法的形式体系。这项偶然的发明最后成为著名的巴库斯—诺尔范式。

1959年6月,巴库斯揣着论文参加联合国教科文组织的Algol大会,试图解释他关于精确语法的思想:“当然,这篇论文我写得太晚了,没有收录在大会的报告集中。我手拿着论文去了大会。因此没有很好地分发它。但丹麦数学家彼得•诺尔读到了它,并作了许多修改,成为当时描述语言语法的最好参考书。”

巴库斯发明了世界上最早和最流行的程序设计语言,并发展了一种可以描述许多语言的符号系统。他对FORTRAN的长期应用也极为满意。FORTRAN保持使用了30年,还有什么计算机可以用5年以上,什么程序在两三年后仍然是最好的?1960年,巴库斯开始了他研究生涯的第二个阶段,这一阶段耗费了10年,最后以失败告终。“那10年我工作地非常努力,”他后来回忆到,“不断有足够的证明使我相信在取得进展。但是最后,我不得不面对这一事实,我没有得出所希望的结果。我不得不放弃。”他一直在IBM研究部门工作,这个部门不太情愿地支持了他7年。巴库斯说:“这个项目的失败很痛苦,我非常喜欢这份工作,很难描述那种感觉,非常绝望,我觉得自己就像最后一次整理那些笔记。”

70年代,巴库斯开始了他研究工作的第三个阶段,这一次,他开始寻找编程更好的方法,希望研究出“功能级的语言”。他坚持认为,编程语言变得越来越复杂,非专家不易使用,应该有所突破了。他注意到成千上万的人都希望用家用越来越便宜的计算机,但是如果他们想有效地使用他们,必须能够自己编程。1977年,巴库斯在图灵奖受奖演说时讲到:“程序设计能从冯•诺伊曼风格中解放出来吗?”他向计算机科学界介绍了一个全新的概念:程序员能够知道自己想要做什么,而并不需要知道怎样做。在Lisp语言(主要用于人工智能)和APL语言的基础上,巴库斯提出了FP语言,其目标是通过数学函数构造程序,具有讽刺意味的是,包括FP语言在内的函数语言,并没有流行起来,主要因为函数语言难于编译成有效的形式。

巴库斯曾在文章中写道:“新的功能性语言,是一个可以选择的功能性编程方式,它的基础是用形式综合来创立程序。功能程序解决结构数据,这些数据常常是非重复性、非循环的,具有等级结构,不用命名它们的自变量,不需要复杂的生成机械功能来应用。综合形式可以用在高级程序中,来建立更高级的程序,这在常规程序中是不可能的。”研究者的生活孤独,有时会没有成效,看不到短期的利益。巴库斯对此深有感触:“我做的是失败的生意。你从事某种工作,失败了,再接着干。这是非常痛苦的,你要不断寻找排遣的方法。”不过巴库斯此刻的失败由于他在FORTRAN上的重大突破而容易接受。他因为开发FORTRAN而获得的承认也给了他面对挫折的勇气,对研究的热爱。

1976年,巴库斯获国家科学勋章,1993年获Draper工程奖。1991年,巴库斯退休,彻底退出了计算机科学界,同时也从科学领域撤退。他只是冥想和阅读一些个人反省的书籍。他写道:

“大多数科学家是因为惧怕生活而成为科学家的。在科学中有所成就是非常诱人的,因为不必与人发生冲突,不必感受人际关系的痛苦,不必在世界上艰难前进就可以成就这些东西。脱离尘世是多么地诱人——这个有几分清净的世界,你可以全力施展你的才华,而没有任何痛苦。解决问题的痛苦和生活中的痛苦比起来是微不足道的。

内省不是一种科学活动:它不可重复,没有关于怎样内省和你要追求什么的好理论。通过对自己的反省可以欣赏到宇宙的神秘,这是很奇怪的。你并不需要试图去发现物理定律。”

约翰·巴克斯——FORTRAN和BNF的发明者回目录

    世界是复杂的,世界上的人和事更是处在瞬息万变之中,叫人捉摸不定。世界上第一个高级程序设计语言FORTRAN和最广泛流行的元语言BNF的发明人约翰·巴克斯(John WarnerBackus)获得1977年的图灵奖显然是绝对当之无愧和众望所归的。但是谁能想到,20岁之前的巴克斯却是个不爱学习、喜欢游荡的纨绔子弟,曾经被大学逐出门外呢?

    巴克斯1924年12月3日生于美国的历史名城费城,其父是阿特拉斯火药公司的职工。当时工厂常常出事故,发生爆炸,产量也上不去,但是谁也找不出原因。老巴克斯是一个机灵的人,他分析问题极有可能与从德国进口的昂贵的温度计可能并不那么精确有关,于是说服公司派他远渡大西洋去德国了解和学习温度计的制造工艺,最后带回了一批好的温度计,终于解决了工厂的安全作业难题,他自己也由一名普通员工被提升为公司的首席化学家。第一次世界大战期间,美国的军火企业都开足马力生产,大捞了一把,老巴克斯也因此显赫一时。战后,由于他没有获得原来许诺给他的在杜邦公司的职务,愤而离开化工界、军火界,改做证券经纪人,也发了一笔大财。因此,童年和少年时代的巴克斯生活条件相当优越,过得无忧无虑。在东海岸特拉华湾的海滨城市威尔明顿度过童年以后,巴克斯就学于宾夕法尼亚州波茨敦市很有名望的希尔学校,但他不爱学习,只盼望暑假到新罕布什尔州的暑期学校,在那里可以划船、嬉戏,度过美好的时光,因此巴克斯的学习成绩从来就不及格,拖了两年才勉强毕业,于1942年进了弗吉尼亚大学。由于本来就不爱学习,加上第二次世界大战已经爆发,1941年12月7日日本偷袭珍珠港以后,美国正式宣布参战,巴克斯更是只等着应征人伍,不思学习,把大多数时间花在舞会上,每周只去上一节轻松的音乐欣赏课,终于被学校处分,扫地出门。1943年巴克斯参军入伍,在乔治亚州服役,当了一名下士,率领一个防空小队。在部队组织的一次能力测试中,巴克斯不经意地显露出了他的聪明和才能,受到上级赏识,陆军决定送他上学深造。这样,当他的战友们都被送往二次大战的战场上去的时侯,巴克斯却上了哈弗福德学院(Haverford College)的医学院预科。但巴克斯对医学不感兴趣,也不喜欢那里的人,觉得他们只会背书而不会思考。因此巴克斯只学了9个月的医学就离开了那里,转到哥伦比亚大学学习数学。经过这番磨炼,巴克斯已经从混沌走向清醒,开始正经学习。1949年他取得学士学位。但毕业时,巴克斯对自己的未来仍然没有什么打算,不知道到哪里去,也不知道干什么好。幸好一个偶然的机会,他到IBM公司的计算中心参观,在那里见到了IBM早期的SSEC计算机(Selective Sequence Electronic Calculator)。SSEC是一台电子管计算机,几个大柜子占满了一间大屋子,到处是电子管和电缆、电线。由于程序必须通过穿孔纸带输入,机器的成千上万个电子机械部件又不可靠,经常出故障,因此机房里操作员、管理员、程序员们忙成一团,查线路的,查手册的,讨论和争论问题的……气氛忙乱而热烈。巴克斯当时并不了解SSEC还不是真正意义上的电子计算机,它连存储程序的存储器都没有,但看到现场的环境和气氛,立刻心里一亮:这正是他要找的工作!这正是适合他性格的富于挑战性的工作!第二天他便向IBM公司的主管提出求职申请,经过一次测试顺利通过,巴克斯从此开始在SSEC上的三年工作。

    人们称巴克斯为“不知疲倦的发明家”。事实确实如此。进入IBM以后,巴克斯就全身心地投人工作。他接手的第一个较大的项目是计算“月历”,这是一个相当复杂而困难的问题,因为月历要能给出一年中任一时刻月亮所处的精确位置坐标,但巴克斯出色地完成了任务。接着,巴克斯和同事海尔里克(H.Herrick)一起又成功地开发出了一个叫Speedcoding的程序,用于浮点数运算。大家知道,浮点运算比定点运算复杂得多,浮点运算部件的设计与实现也困难得多,因此早期计算机大多没有浮点运算部件。但许多科学与工程计算问题又需要处理非常小的数或非常大的数,这怎么办呢?计算机的先驱冯·诺伊曼提出对定点数附以“比例因子”使之成为浮点数,从原则上解决了这个问题,但却给程序员出了难题:在不能确切知道计算的中间结果和最后结果的范围的情况下,如何设定比例因子?比例因子取小了,运算发生溢出;比例因子取大了,影响结果精度。这成了当时程序设计的一大难题。巴克斯和海尔里克的Speedcoding成功地解决了这个难题,可以根据问题自动设置和调整比例因子,免除了程序员在这方面的麻烦。

    月历程序和Speedcoding程序的成功奠定了巴克斯作为出色的程序员在公司的地位,赢得了同事的尊敬和上司的器重。但巴克斯是一个永远不满足于现状、总想变革现实的人。鉴于当时用机器语言也就是二进制代码0和1进行编程和调试程序所带来的种种弊端——效率低,难于检查和发现问题,不便于交流,以及由此而导致软件开发费用高昂,等等,经过深思熟虑,巴克斯于1953年向IBM的老板卡斯伯特·赫德(Cuthbert Hurd)提交了一个备忘录,建议设计一种接近人类语言的编程语言代替机器语言,以从根本上提高编程效率,降低编程费用。意想不到的是,巴克斯这一对计算技术的发展起了如此重大影响的历史性建议遭到了当时任IBM公司顾问的冯·诺伊曼的强烈反对。由于对程序设计的高昂费用和代价不太了解,冯·诺伊曼认为巴克斯的建议是没有必要的,也是不切实际的。好在赫德比较开明而有远见,虽然冯·诺伊曼的声望和地位远比巴克斯高,他还是支持了巴克斯,批准了巴克斯的计划,使Fortran的诞生成为可能。1957年4月,经过巴克斯和他的同事们的艰苦努力,Fortran(由“公式翻译器”,即formula translator各取前几个字母组合而成)的编译器第一次在西屋电气公司订购的704计算机上成功运行,标志着一个时代(机器语言编程时代)的结束,另一个时代(高级语言编程时代)的开始。Fortran语言主要用于数值计算,它的特点是接近数学公式,简单易用,功能逐步扩大,如允许复型和双精度浮点运算,子程序定义机制,输入输出的格式说明,允许布尔表达式,函数和子例程名可以作为参数传递,等等。作为世界上第一个高级程序设计语言,它对其后出现的上千种高级程序设计语言都有或大或小的影响,它本身也经历了许多重大的变革,有许多版本。据不完全统计,从20世纪50年代诞生至今,Fortran共出现过90多个版本,其中曾经流行的主要版本有Fortran I,1958年推出的能处理子程序,并可与汇编语言相连的FortranⅡ,1962年问世的FortranⅢ,1966年推出第一个Fortran语言标准称为Fortran66,20世纪70年代修订为Fortran 77,1991年IS0批准新的Fortran标准称为Fortran 90,等等。在Fortran 90中,又有如下一系列的扩充与改进:

    (1)数组运算机制;

    (2)改善了数值计算;

    (3)数据类型参数化,允许使用多种字符类型,满足各国字符处理的需要;

    (4)从6种内部数据类型中派生出用户定义的数据类型;

    (5)模块化数据与过程定义机制,提供了一种数据与过程包装的强有力的而又安全的形式;

    (6)指针机制,允许创建和操作动态数据结构;

    (7)增加自由形式的源程序形式;

    (8)提供了过程的递归调用机制;

    (9)提供了附加的控制结构,如do...end do,do,while<condition>等。

    此外,还有许多为了满足解特定问题的需要而对Fortran加以补充或修改而形成的高级程序设计语言,其中比较著名的有美国阿姆斯研究中心计算流体动力学分部对Fortran进行逻辑扩充、在ILLIACⅢ计算机上实现的CFD语言(Computational Fluid Dynamics,即计算流体动力学语言),这个语言依赖于能够执行向量及标量指令的机器语言,是与机器有关的;code and go Fortran,这是对FortranⅢ的一种改进版本,主要为了快速编译和执行;CONTRAN语言(Control Translator),这是综合了FortranⅢ和ALGOL60语言的许多特点而形成的高级语言;LRLTRAN(Lawrence Radiation Laboratory Translator,劳伦斯辐射实验室翻译程序),这是著名的劳伦斯辐射实验室根据其特定需要在CDC公司的STAR—100计算机(这是20世纪70年代中期推出的一种大型快速计算机,其中央处理器包含两条浮点流水线和用于处理十进制数和字符串的行部件,指令系统中有硬件宏指令,能处理向量、稀疏向量及行,有磁心存储器、页面调度的磁鼓和磁盘存储器三级存储器,有4至12个16位的输入输出通道和一个128位的直接快速存取通道,是当时典型的单指令流多数据流系统)上开发的一种基于Fortran,但具有向量运算、位和字节操作以及指针操作的高级语言,特别适合于科学计算和系统程序设计。另外,在宝来公司(Bur·rollshs)20世纪70年代为美国国防部用于弹道导弹防卫数据实时处理而研制的著名PEPE计算机系统(Parallel Element Processing Ensem-ble,并行单元处理组合,实际上就是由多达1 000个处理单元组成的多处理机并行计算机系统)中,其核心软件是一种称为PFOR的并行的Fortran语言。此外,还有适合于有理函数计算的ALTRAN,适合于处理向量与矩阵的VECTRAN,等等,无不都是在Fortran的基础上设计、开发出来的,都可以认为是Fortran家族中的成员,而Fortran则是这个庞大家族的“始祖”。还应该特别指出的是,曾经出现的成百亡千个高级程序设计语言,绝大多数自从出世就没有流行过;有许多则风行一阵以后就很快销声匿迹,而Fortran则至今常胜不衰,保持着强大的生命力,这说明了它设计与实现两方面都是成功的。附带说一句,冯·诺伊曼于1957年不幸英年早逝,没有看到Fortran正式投入使用,但这位出生在匈牙利的天才科学家后来意识到了自己在这件事上的错误,没有坚持反对巴科斯的计划。

    基于Fortran的巨大成功,在1958年5月于苏黎世举行的一次国际性计算机会议上,决定成立一个委员会,以Fortran为基础,对它作进一步改进,以形成一种单一的、标准化的计算机高级程序设计语言。许多著名的计算机科学家都参加了这个委员会。它的工作成果就是Algol 58及随后的Algol 60等一系列版本。巴克斯也参加了这个委员会,而且对Algol融入了一些新概念、新思想、新功能,如局部变量、递归等由衷地感到高兴。但这时,基于开发Fortran的经验,巴克斯关注的重点已由定义语言本身转为如何清晰地描述和表达语言这个问题上,也就是要创建一个“元语言”(metalanguage)。经过不懈探索,1959年6月,在联合国教科文组织即UNESCO于巴黎召开的一个讨论程序设计语言的语法和语义的会议上,巴克斯在他提交的一篇论文中提出了如今众所周知的“巴克斯范式’’BNF(Backus NormalForm)。巴克斯范式以递归方式描述语言中的各种成分,凡遵守其规则的程序就可保证语法上的正确性。BNF由于其简洁、明了、科学而被广泛接受,成为描述各种程序设计语言的最常用的工具。我们现在看到的各种程序设计语言文本中所给出的BNF,是Backu。—NaurForm,即巴克斯—诺尔范式,也就是经丹麦数学家彼得·诺尔(PeterNaur)改进与完善过的巴克斯范式,实际上绝大多数又是经瑞士著名的计算机科学家沃思(N.Wirth)扩充过的巴克斯—诺尔范式,即EBNF(Extended BNF)。沃思是1984年图灵奖获得者。

    巴克斯范式的左部是一个非终结符,非终结符用尖括号括起。右部是由非终结符和终结符组成的一个任意符号串。具有相同左部的产生规则可以共用一个左部,各右部之间以竖直线“|”分开。例如定义“标识符”的一组BNF公式为:

    <标识符>::=<字母>|<标识符><字母>|<标识符><数字>

<字母>::=a|b|c|…|x|y|z

    <数字>::=0|1|2|3…|8|9

    我们目前常用的高级程序设计语言都是所谓冯·诺伊曼型的语言,也就是而向过程的语言,是以“逐词逐句”的方式工作的。巴克斯后来致力于开发非冯·诺伊曼型的语言,也就是函数式语言(functiona1 1ansuase)。这种语言的主要成分是原始函数、函数型和定义函数。程序就是函数,程序作用在结构型数据上,产生结构型结果。用这种语言编写的程序结构清晰,便于使用代数方法研究程序的特性。巴克斯后来推出了一种名为FP的函数式程序设计系统成为函数式语言的典型代表。此外,巴克斯也是归约机(reduction machine)这一不同于冯·诺伊曼型的新的计算机体系结构的首创者。1972年,巴克斯在其为IBM公司所撰写的研究报告“归约语言及无变元的程序设计”(Reduction Languages and Variable Free Programming)一文中最早提出了归约的概念。归约的基本思想是在函数的计算过程中通过替换不停地修改计算目标,直到被计算的目标已经是最小单元为止。这种方式不再具有变元的概念,所有的目标均是通过计算获得的。这一过程与纯函数的递归计算过程的代入方法相接近,因而可以把对归约机的研究与函数式程序设计语言的研究结合在一起。归约机的结构中一般包括递归机构和替换机构,归约方式则分串归约和图归约两种,前者实现按值调用,后者实现按引用调用。在巴克斯论文发表以后,一批学者致力于归约机的研究与开发,相继推出了GMD(Berklin,1975)、Cellular(北卡罗莱纳大学Mago,1979)、AMPS(R.M.Keller,1979)、ALICE(J.Darlington,1981)等一批各种类型的归约机。其中以树结构的Cellular最引人注意。

    巴克斯由于以上介绍的一系列重大成就而获得许多荣誉和奖励。除图灵奖外,1967年他获得IEEE的W.W.McDowell奖;1975年被授予美国全国科学奖章(National Medal of Science);1982年IEEE授予他“计算机先驱奖”(Computer Pioneer Award);1994年美国工程院授予他Charles Stark Draper奖。巴克斯是美国科学院院士,也是美国工程院院士。

    巴克斯是在1977年10月17日于西雅图举行的ACM年会上接受图灵奖的。ACM评奖委员会主席萨梅特(J.E.Sammet)致词并授奖,巴克斯发表了演说,题为“程序设计能从冯·诺伊曼形式中解脱出来吗?函数式风格及其程序的代数”(Can Programming be Literated from the yon Neumann Style? A Functional Style and Its Algebra Of Programs),对他所开发的FP及其意义作了详细的介绍。演说全文刊载于Communications of ACM,1978年8月,613—641页,也可见《前20年的ACM图灵奖演说集》(ACM Turing Award Lectures  The First 20Years:1966—1985,ACM Pr.),63—130页。

  巴克斯已于1991年退休。

John W. Backus 走了... 回目录

根据IBM公司2007年3月20日公布的消息,被誉为“Fortran语言之父”的美国计算机先驱人物约翰·巴克斯3月17日因病逝世,享年82岁。

巴克斯曾在IBM公司工作多年,1991年退休。巴克斯于上世纪50年代开发出了著名的编程语言Fortran,这是第一种高级编程语言。在此之前的机器语言,写一段简单的程序,往往需要很多复杂的指令,然后靠机器直接执行。而Fortran语言将这一过程“抽象化”,程序员只需输入相对简单的指令,计算机就能将其自动翻译成机器语言。

(图)John BackusJohn Backus

因此,从一定意义上可以说,Fortran改变了人与计算机之间的“交互方式”,并为后来的现代计算机软件开发奠定了基础。

美国计算机学会评奖委员会主席霍宁评价说,Fortran语言的诞生是计算机领域的一个巨大突破,它改变了“游戏方式”,“而这种改变在计算机业的历史上仅有过两三次。”巴克斯因此也获得了1977年的图灵奖,图灵奖是计算机界最高荣誉之一。

巴克斯的教育履历令人“刮目相看”,中学时因为厌学,成绩一塌糊涂,不得不另外补课。后在化学家父亲的逼迫下,他到弗吉尼亚大学学习化学,但6个月后便以退学告终。应征加入美国陆军后,他又学起了医学,后来发现无线电工程更有乐趣,遂放弃医学改学工程,但最终却决定钻研数学,并获得了哥伦比亚大学的硕士学位。毕业前,他在纽约曼哈顿岛参观IBM公司,并被当场聘用。

巴克斯是个特立独行的人,以着装为例,他偏爱牛仔裤,与IBM公司员工的传统着装风格格格不入,但他备受公司器重,在那里一直干到退休。

早在上个世纪50年代,前IBM计算机科学家巴库斯开发了FORTRAN编程语言(注:FORTRAN是英文Formula Translator的缩写,即“公式翻译”之意)。FORTRAN是全球首款应用最为广泛的计算机编程语言。巴库斯已于去年辞世,享年82岁。在巴库斯年轻时,即被诊断为患有脑肿瘤。在进行手术后,医生在他的脑袋中放置一块金属板。不久后,所更换的第二块金属板就由他本人亲手设计。

获得的荣誉列表回目录

Named an IBM Fellow (1963)[7]
Awarded W.W. McDowell Award (1967)[1]
Received National Medal of Science (1975)[2]
Awarded ACM Turing Award (1977)[3]
Awarded degree honoris causa (1989)[8]
Awarded Draper Prize (1993)[9]
Awarded Computer History Museum Fellow Award (1997)[10]
Asteroid 6830 Johnbackus named in his honor (June 1, 2007) †

参考文献回目录

→如果您认为本词条还有待完善,请 编辑词条

标签: John Backus 约翰·巴库斯 John Warner Backus John W. Backus