整理 | 屠敏
出品 | CSDN(ID:CSDNnews)
1 月 4 日,Eiffel 编程语言的创造者 Bertrand Meyer 在 Twitter 上发布了一则讣告,“我们是失去了一位编程语言、编程方法、软件工程和硬件设计领域的巨星。Niklaus Wirth 于 1 月 1 日去世。我们对这位先驱、同事、导师和朋友的离去深感哀痛。”
Niklaus Wirth,这位被很多人尊称为编程祖师爷的人物,先后开发了 Euler、Algol-W、Pascal、Modula、Modula-2、Oberon、Oberon-2 和 Oberon-07 多款具有创新性的语言。其中,最让人熟知、也是很多程序员入门语言的 Pascal,不仅具有重要教学意义,而且为未来的计算机语言、系统和体系结构研究提供了基础。
与此同时,Niklaus Wirth 对计算机语言和软件开发有着清晰而深思熟虑的观点,他在 1976 年提出来的「算法+数据结构=程序」的结构化公式直至现在也在影响无数应用。
生平经历:凭借 Euler、Algol-W 在计算机领域崭露头角
回顾一代巨擘的成长经历,从小在瑞士长大的 Niklaus Wirth,大部分生涯是在苏黎世的瑞士联邦理工学院 (ETH) 度过的。
1959 年,Niklaus Wirth 在苏黎世的瑞士联邦理工学院获得学士学位后,前往加拿大拉瓦尔大学攻读研究生,并在 1960 年取得硕士学位。而后他继续进入加州大学伯克利分校深造,于 1963 年获得博士学位。
在整个学生生涯中,从小便具有极强动手能力的 Niklaus Wirth 一直没闲着,也做了很多计算机科学的研究工作。时至 1960 年,Wirth 正在撰写博士论文时,一篇《算法语言 Algol 60 报告》(https://dl.acm.org/doi/10.1145/367236.367262)横空出世,吸引了不少学者的关注。
Algol 60 是最早实现函数定义(可以递归调用)的语言之一,其函数定义可以相互嵌套,具有词法作用域。在很多人看来,Algol 60 是业界第一个清晰定义的语言。
不过,在当时那个环境下,也有一些学者认识到,清晰的规格说明对于可靠而有效的实现是必需的,但还不够。还有人从报告中发现了一些不足。
后来 Wirth 在和 Algol 的主要设计者 Andrian van Wijngaarden 多次交流之后,决定对 Algol 60 做进一步优化,并以此为自己的博士论文课题,后来就诞生了一款通用编程语言 Euler。
正是有了上述经历,斯坦福大学看中了 Wirth,这也是为什么随着博士毕业,Niklaus Wirth 直接进入斯坦福大学担任计算机科学助理教授的原因。
除此之外,这一次的尝试也得到了 Algol 项目组的青睐,随后也加入了 Algol 语言完善与扩充的工作小组工作。
1966 年,Wirth 向小组提交了一份提案,该提案要求下一代 Algol 是受到他自己的语言 Euler 影响的 Algol 60 的扩展和改进版。遗憾的是,Algol 委员会反对这项提案,并采用一个更复杂、更先进的设计,而不是 Wirth 所提出经过简化的 Algol 60。
当然,让 Algol 委员会没想到的是,其后来推出更复杂的 Algol 68 版本与Algol 60 存在很大不同,因此也遭到了业界不少的批评。
与之形成对比,选择与 Tony Hoare(1980 年图灵奖得主)合作,将被拒绝的提案转变为新的非官方 Algol 版本——Algol-W,它在斯坦福大学的第一台 IBM 360 上成功实现并正式应用。
值得一提的是,IBM 360 当时只提供汇编语言和 FORTRAN 语言,但 Wirth 和他的学生都觉得这两者并不适宜于作为设计编译器的工具。后来,Wirth 和他的学生开发了一款新的系统编程语言 PL360,用于 IBM System/360 系列计算机。而 Wirth 也在 1968 年选择从 Algol 小组辞职。
Wirth 的这项早期工作在语法和语义的正式分离、新颖的实现技术以及通过特定解析方法进行高效实现的精细语言设计方面开辟了新天地。
Pascal 之父
Wirth 使用 Algol-W 作为他最具影响力的创造语言 Pascal 的基础。
1970 年,Wirth 设计了 Pascal,最初的目的是作为一种教学工具,以推广另一位领先的计算先驱 Edsger W. Dijkstra 的结构化编程风格,但它很快就超越了其最初的设想范围,成为一种通用语言。
Wirth 曾在接受外媒采访时说道,“只要程序员们珍惜他们的自由,不仅可以设计出自己聪明的软件,而且还可以按照自己的喜好修改已被采用的软件,那么就不可能有适当的设计纪律。只要公司暗中珍视复杂性,将其作为防止被抄袭的有效保护措施,那么大幅提高技术水平的希望就渺茫。”
所以,简单性是 Wirth 一直遵循的原则。Pascal 就是遵循他的个人审美、简单、灵活等准则的产物,旨在快速编译为高效代码。它保留了 Algol 的代码结构、逻辑完整性和对递归的支持,但剥离了一些复杂性并增加了对用户定义数据类型的支持。
Pascal 于 1971 年在 ETH 中被采用用于教学,并很快就得到了大学的认可。
为了帮助在各种计算机上实现 Pascal,Wirth 创建了一种新型编译器,该编译器是为虚拟机编写的,并生成在虚拟机上运行的代码。在新计算机上模拟这个虚拟机可以轻松移植他的编译器。
可要说 Pascal 之所以会成为一门通用语言,Wirth 表示,“位于圣克鲁斯的 Borland Inc. 的 Philippe Kahn 为我们的编译器提供了一个简单的操作系统、一个文本编辑器以及用于错误发现和诊断的程序。他们以 50 美元的价格出售这个软盘包 (Turbo Pascal)。因此 Pascal 立即传播开来,尤其是在学校,它成为许多人进入编程和计算机科学的切入点。”
Borland Turbo Pascal 的第一个历史性广告
Modula 之父
20 世纪 70 年代中期,为适应并发程序设计的需要,Wirth 又成功开发了一个获得广泛应用的语言 Modula。
Modula 除了提供并发程序设计功能之外,另外一个重要特征是引进了模块概念(这也是这个语言叫做Modula的原因)。此外,它还引进了“进程”(process)这一和并发程序相联系而产生的重要概念。
但是,比 Modula 具有更加重大意义的却是它的第二个版本 Modula-2。
彼时 Wirth 在 1976 年至 1977 年期间于施乐帕洛阿尔托研究中心 (PARC) 度过了一个假期,期间接触到了新的工作站技术,即在 ETH 领导一个项目,旨在构建一个新的图形工作站。它被命名为 Lilith,是一个完整的计算环境,具有操作系统 (Medos)、高速局域网、文本和图形编辑器以及激光打印机等应用程序。
Wirth 开发新的编程语言 Modula-2 扩展了 Pascal,支持并发性和更高的代码模块化性。在 Wirth 指导下,一款由 Modula-2 模块构建的单用户、面向对象的操作系统的 Medos-2 诞生了。
第一批 Lilith 系统便是搭载了上述的系统,并于 1980 年开始运行,使这些功能在商业产品出现之前就已成为 ETH(以及其他几所大学)的标准。
几年后,Wirth 又领导了 Lilith 的后续版本 Ceres 工作站的开发,以及其操作系统以及新的面向对象的 Oberon 编程语言和操作系统的开发。
从 20 世纪 80 年代中期到 20 世纪 90 年代,ETH 曾多次使用这些标准。Modula-2 和 Oberon 被转移到商业机器上并用于计算机科学教学应用,尽管两者都没有 Pascal 的广泛影响。
Oberon 是为完全不同的机器实现的,实现了后来因 Java 而闻名的程序可移植性。
硬件设计的重要参与者
和很多计算机科学家有所不同,Niklaus Wirth 在进行软件开发时,同样意识到硬件的重要性与挑战性。
在后来很长一段时间里,Wirth 将自己的精力分一半聚焦到硬件维度,他还利用 FPGA 开发了语言和工具来根据高级规范,对其进行有效配置。
不仅如此,他也将自己毕生所学倾囊相授,推动 ETH 大学内部所有计算机科学专业的学生和教师使用内部生产的硬件、操作系统和编程工具。
在 Wirth 看来,学生在尝试编写自己的系统之前应该阅读并理解真实系统的代码。
1984 年,因为开发了这些语言带来了极大的影响力,Wirth 荣获了图灵奖。此外,他也是集诸多奖项于一身,如 IEEE 计算机协会计算机先驱奖(1988 年);1988 年 IBM 欧洲科技奖(1989 年);瑞士工程院院士(1992 年);美国工程院外籍院士(1994 年);Orden Pour le merite(1996 年);ACM SIGSOFT 软件工程杰出研究奖(1999 年)。
出版物
除此之外,Wirth 一直也对编程方法有着很深的研究。早些时候,他参加了 IFIP 编程方法论工作组,提出了逐步细化代码的想法,作为对他们提出的“结构化编程”各种愿景的补充。
他出版的书《系统编程》和《算法 + 数据结构 = 程序》 是对编程方法和概念文献最有影响力的贡献之一。
向 Niklaus Wirth 致敬
Niklaus Wirth 不仅是一位优秀的图灵奖得主,更是让很多程序员感到十分亲切的良师与挚友。正如 tasty_freeze 留言道:
除了对语言设计的贡献,他还创作了有史以来最好的双关语之一。他的姓氏正确的发音是“Virt”,但在美国,大家都叫他“Worth”。
这让他调侃道:“在欧洲,人们叫我名字,但在美国,人们叫我价值”。
Niklaus Wirth 的离世,一代巨星陨落,让很多人感到难过。
Google AI 首席科学家 Jeff Dean 表示:
听到很伤心。Niklaus Wirth 对计算领域做出了许多巨大的贡献。Pascal 是我认真使用的第一种语言(最初在 UCSD p-System 上,后来通过 Turbo Pascal),我在中学时接触到了他写的这本伟大的书。后来,我喜欢使用 Modula-2 来做一些事情(他对 Modula-3 的间接影响很大)。
当被问到如何发音他的名字时,我也喜欢这个轶事:
“欧洲人通常以正确的方式发音我的名字(‘Ni-klows Wirt’),而美国人总是把它改成‘Nick-les Worth’。这就是说,欧洲人用名字来称呼我,而美国人则用价值来称呼我。
lukego 表示:
除了数不胜数的成就之外,他还是 Joe Armstrong 心目中的英雄,并对他的简约品牌产生了重大影响。
Joe 经常引用 Wirth 的话说,是的,重叠窗口可能比平铺窗口更好,但好的不足以证明其实施复杂性的代价是值得的。
他是我心目中的英雄,因为在他于 ETH 举办的 80 岁生日研讨会上,他展示了他将 Oberon 移植到自制 CPU 上的新成果,该 CPU 可在带有 USB peropherals 的随机 FPGA 开发板上运行。我的理想就是有一天也能成为这样的 80 岁老人。
斯人已逝,其光永存。R.I.P
参考:
https://amturing.acm.org/award_winners/wirth_1025774.cfm
https://news.ycombinator.com/item?id=38858012
https://shidian.baike.com/wikiid/4811571837582058102?anchor=4
领取专属 10元无门槛券
私享最新 技术干货