欧洲的编程语言三巨头,只剩下一位了码农翻身
能把三位大牛的名字都叫出来的人恐怕不多吧:
这三位都是图灵奖获得者,他们的名字和发明散布在各种教科书中,从左到右,依次是:
尼克劳斯·沃斯 (Niklaus Wirth)
瑞士人,一生发明了8种编程语言,其中最著名的是Pascal,提出了著名的“程序=数据结构+算法”,1984年沃斯因开发了一系列创新的计算机语言而获得图灵奖。
迪杰斯特拉(Edsger Dijkstra)
荷兰人,发明了“最短路径算法”,“信号量”,提出了“Goto是有害的”,1972年因对结构化编程的贡献获得图灵奖。
霍尔(Tony Hoare)
英国人,发明了“快速排序算法”,发明了霍尔逻辑来验证程序正确性,提出CSP解决并发过程的交互,发明了null这个引发“数十亿美元”损失的错误,1980年因为对编程语言的定义和设计的基本贡献获得图灵奖。
他们三人都在欧洲,都是从学工程学开始,后来转到了计算机领域。
他们年龄相仿(沃斯和霍尔同岁,比迪杰斯特拉小4岁),共同的兴趣让他们走到一起,不但在暑期活动,学术会议上经常碰面,密切合作,在私下里,也建立了深厚的友谊,经常来回走动,互相拜访。
今天讲几个小故事来聊聊他们的伟大贡献。
迪杰斯特拉率先登场
在上世纪六七十年代,是编程语言发展的黄金时代。
第一个高级编程语言Fortran已经出现,但是主要应用在工程界,和硬件密切相关。
1960年1月,Fortran之父约翰·巴克斯,Lisp之父约翰·麦卡锡,第一位图灵奖获得者Alan Jay Perlis等一大批顶尖科学家在巴黎聚会,经过一番唇枪舌战的讨论,他们推出了ALGOL 60,这是一种和计算机硬件无关的编程语言,方便算法的描述。
ALGOL 60有很多创新,递归、本地变量、begin end 代码块都是由它率先推出。
现代大多数编程语言的语法,都是类ALGOL的。
从下图中,就可以看到ALGOL的江湖地位,是很多编程语言的老祖宗。
迪杰斯特拉对Algol-60非常欣赏,他不止一次说道,这是计算机科学成为一个学科的重要时刻。
仅仅7个月以后,迪杰斯特拉就在荷兰实现了第一个ALGOL60的编译器,比其他小组早了一年多。
为了实现ALGOL60中的递归,迪杰斯特拉第一次引入了Stack这个概念。
迪杰斯特拉等人还举办了一个ALGOL 60的培训班,来培训的就有霍尔,霍尔刚刚发表了快速排序算法,他上完培训班,也在自己公司机器上实现了ALGOL 60,霍尔的实现效率高,可靠性强,受到国际学术界的关注,进入了IFIP工作组,开始维护和发展ALGOL。
PASCAL的诞生
1966年,霍尔和沃斯一起做了一个提案,希望对ALGOL做出一次改进。但是ALGOL小组认为他们的提案太保守,改动太小,拒绝了。
“一气之下”,沃斯和霍尔退出了ALGOL小组,自己把提案的想了做了实现,即编程语言ALGOL W。
正是在ALGOL W 中,霍尔发明了那个被“无数人诟病”的空引用null。
在2009年的一个软件会议上,霍尔为发明null夸张地道歉:
“我当时正在设计ALGOL W 的类型系统,我忍不住想把null放进去,因为它很容易实现......没想到它导致了无数的错误,系统崩溃......在过去的40年,引发了数十亿美元的损失。”
1970年,沃斯进一步改进了 ALGOL W,成为了大名鼎鼎的Pascal
为了帮助在各种计算机上实现Pascal, 他创建了一种新型的编译器,该编译器不会直接生成机器码,而是生成一种中间的代码形式,在虚拟机上运行。
1976年,沃斯写了一本书介绍基本的数据结构和算法,也捎带着介绍了Pascal语法。
这本书的名称也很神奇,叫做《程序=算法+数据结构》,从此这个公式开始名扬世界。
PASCAL的流行
虽然 Pascal 很快就得到了大学的认可,但它又花了几年时间才成为主流。
这得益于Philippe Kahn,是沃斯在瑞士苏黎世联邦理工学院教学期间的一个学生。
Philippe Kahn看到了沃斯教授在Pascal上的开创性工作,1982年成了一家叫做Borland的公司,从事软件开发工具的开发。
1983年,Borland推出了革命性的集成开发环境,Turbo Pascal ,仅卖49.95美元。
Turbo Pascal 除了价格低廉以外,另外一个杀手锏就是编译速度飞快。


