欧洲编程语言四巨头

从左往右,依次是 尼克劳斯·沃斯 (Niklaus Wirth),迪杰斯特拉(Edsger Dijkstra),霍尔(Tony Hoare)

尼克劳斯·沃斯 (Niklaus Wirth)

瑞士人,一生发明了8种编程语言,其中最著名的是Pascal,提出了著名的"程序=数据结构+算法",1984年沃斯因开发了一系列创新的计算机语言而获得图灵奖。

迪杰斯特拉(Edsger Dijkstra)

荷兰人,发明了"最短路径算法","信号量",提出了"Goto是有害的",1972年因对结构化编程的贡献获得图灵奖。

霍尔(Tony Hoare)

英国人,发明了"快速排序算法",发明了霍尔逻辑来验证程序正确性,提出CSP解决并发过程的交互,发明了null这个引发"数十亿美元"损失的错误,1980年因为对编程语言的定义和设计的基本贡献获得图灵奖。

他们三人都在欧洲,都是从学工程学开始,后来转到了计算机领域。

他们年龄相仿(沃斯和霍尔同岁,比迪杰斯特拉小4岁),共同的兴趣让他们走到一起,不但在暑期活动,学术会议上经常碰面,密切合作,在私下里,也建立了深厚的友谊,经常来回走动,互相拜访。

Anders Hejlsberg(安德斯·海尔斯伯格)

丹麦人,Turbo Pascal编译器的主要作者,Delphi、C#和TypeScript之父,.NET(dotnet)创立者。安德斯·海尔斯伯格为MS-DOS和CP/M设计了Pascal编译器,Borland买下该编译器改称Turbo Pascal,之后安德斯·海尔斯伯格开发Turbo Pascal并带领小组设计了Turbo Pascal的替代品Delphi。

ALGOL60

上世纪六七十年代,是编程语言发展的黄金时代。

已经有了第一个高级编程语言Fortran,但是主要应用在工程界,和硬件密切相关。

1960年1月,巴黎聚会,参与者有Fortran之父约翰·巴克斯,Lisp之父约翰·麦卡锡,第一位图灵奖获得者Alan Jay Perlis等一大批顶尖科学家。经过一番讨论,他们推出了ALGOL 60,这是一种和计算机硬件无关的编程语言,方便算法的描述。

ALGOL 60有很多创新,递归、本地变量、begin end 代码块都是由它率先推出。

ALGOL是很多编程语言的老祖宗,现代大多数编程语言的语法,都是类ALGOL的。见下图:

迪杰斯特拉与ALGOL60

迪杰斯特拉对Algol-60非常欣赏,他多次提到,这是计算机科学成为一个学科的重要时刻。

仅仅7个月以后,迪杰斯特拉就在荷兰实现了第一个ALGOL60的编译器,比其他小组早了一年多。

为了实现ALGOL60中的递归,迪杰斯特拉第一次引入了Stack这个概念。

迪杰斯特拉等人还举办了一个ALGOL 60的培训班,来培训的就有霍尔。霍尔刚刚发表了快速排序算法,他上完培训班,也在自己公司机器上实现了ALGOL 60,霍尔的实现效率高,可靠性强,受到国际学术界的关注,进入了IFIP工作组,开始维护和发展ALGOL。

沃斯、霍尔和PASCAL

1966年,霍尔和沃斯一起做了一个提案,希望对ALGOL做出一次改进。但是ALGOL小组认为他们的提案太保守,改动太小,拒绝了。

"一气之下",沃斯和霍尔退出了ALGOL小组,自己把提案的想法做了实现,命名为ALGOL W。

正是在ALGOL W 中,霍尔发明了空引用null。

1970年,沃斯进一步改进了 ALGOL W,成为了大名鼎鼎的Pascal。

为了能在各种计算机上使用Pascal, 他发明了一种新型的编译器,该编译器不会直接生成机器码,而是生成一种中间的代码形式,在虚拟机上运行。

1976年,沃斯写了一本书《程序=算法+数据结构》,介绍基本的数据结构和算法,也捎带着介绍了Pascal语法。

Turbo Pascal

虽然 Pascal 很快就得到了大学的认可,但它又花了几年时间才成为主流。

这得益于Philippe Kahn,是沃斯在瑞士苏黎世联邦理工学院教学期间的一个学生。

Philippe Kahn看到了沃斯教授在Pascal上的开创性工作,1982年成了一家叫做Borland的公司,从事软件开发工具的开发。

1983年,Borland推出了革命性的集成开发环境,Turbo Pascal ,仅卖49.95美元。

Turbo Pascal 除了便宜以外,另外一个杀手锏就是编译速度贼快。

操刀编译器的是丹麦人安德斯(Anders Hejlsberg),他受到了《程序=算法+数据结构》这本书中Tiny Pascal编译器的启发。

关于安德斯的故事,可以搜索《一个养活了四代程序员的男人》。

Goto是有害的

1968年,迪杰斯特拉向ACM提交了一篇论文,尖锐地批评了当时编程中过度使用Goto语句的情况,以及对结构化编程的拥护,他提议,在高级语言中废除Goto语句!

论文的标题平淡无奇:A Case Against the Goto Statement。

沃斯正好是当时的编辑,他顺手把标题改成了Goto语句是有害的(Goto Statement Considered Harmful)。

如果放在如今的自媒体时代,沃斯绝对是一个擅长抓热点的标题大师。

这个标题就像一个重磅炸弹,很多大牛跳出来,或支持或反对。

高德纳写了一篇叫做《使用 Goto语句进行结构化编程》的文章,分析了一些常见的编程场景,指出一些场景中Goto是最适合的语言结构。

K&R在《C语言编程》中,也指出Goto可以用于函数结束错误处理程序和循环的多级中断。

即使在多年以后,Linus之父Linus Torvalds和《代码大全》的作者Steve McConnell还反对迪杰斯特拉的观点,指出 Goto可以是一种有用的语言功能,可以提高程序速度、大小和代码清晰度。

据统计,2013 年,Linux 内核代码中约有 100,000 个 goto。

"XXX是有害的"成为了计算机的时尚用词,在随后的几十年中不断出现:

"全局变量是有害的"

"Unix风格,或者cat -v 是有害的"

"MD5被认为是有害的"

"以人为本的设计是有害的"

"Java的新特性是有害的"

"'被认为有害'的文章是有害的"

沃斯,迪杰斯特拉和霍尔,获得图灵奖都和编程语言有关。他们都是结构化编程的先驱,深刻地影响了我们现在的编程。

2002年8月6日,迪杰斯特拉去世,享年72岁。

2024年1月1日,沃斯去世。享年89岁。

三位老伙计中,现在就只剩下霍尔了。当然,还有在微软上班的安德斯(Anders Hejlsberg)。

欧洲另两位,挪威的奥利-约翰·达尔(Ole-Johan Dahl)和克利斯登·奈加特(Kristen Nygaard),是在2002年去世。

克利斯登·奈加特是SIMULA-67语言的创始人,面向对象技术的先驱,曾获得冯·诺依曼奖和第36届图灵奖(2001年)。此外,他还一直活跃于挪威政坛,并曾任威左翼非社会主义政党Venstre的执行委员会成员,该党战略委员会主席。

奥利-约翰·达尔是"面向对象编程"之父,36届图灵奖得主之一(2001年),挪威科学院院士,生前是挪威奥斯陆大学教授。​

我们现在使用的编程语言的概念和特性,差不多都在上世纪六七十年代就已发明,这一批编程语言的前辈一个个都在离去。现在需要新的一代成长起来。

转自 个人文摘360 doc

欧洲的编程语言三巨头,只剩下一位了!

相关推荐
量化风云5 个月前
追寻美的指引--纪念西蒙斯
量化交易·人物
洛克Lee10 个月前
stable diffusion 人物高级提示词(三)动作、表情、眼神
stable diffusion·prompt·人物·动作