No.446 第19届图灵奖、结构化编程开创者、PASCAL作者:尼古拉斯·沃斯

No.446 第19届图灵奖、结构化编程开创者、PASCAL作者:尼古拉斯·沃斯

2024-07-12    24'59''

主播: 软件那些事儿🚉

305 1

介绍:
Niklaus Wirth 是一位著名的编程语言设计师。只要学过一点计算机的人,应该都听过“数据结构 + 算法 = 程序”这个公式吧?这个公式的提出者正是瑞士的计算机科学家尼克劳斯·沃思(Niklaus Wirth),他不仅发明了多种对编程界影响深远的语言,还提出了结构化程序设计的革命性概念。凭借这些成就,他在1984年获得了图灵奖,是目前唯一一位获得这个奖项的瑞士学者。 Wirth 的母校是苏黎世联邦理工学院(ETH),在欧洲乃至全球都有很高的声誉。1967年,他回到母校,1968年成为教授,一直到1999年退休。在 ETH 期间,他发明了多种编程语言,其中最著名的就是 Pascal。 尼克劳斯·沃思(Niklaus Wirth)于1934年2月15日出生在瑞士北部靠近苏黎世的温特图尔(Winterthur)。他的父亲瓦尔特是一位地理学教授。沃思从小就喜欢动手动脑,他最大的爱好是组装飞机模型。中学毕业后,沃思进入了享有盛名的苏黎世联邦理工学院(ETH),并于1958年获得学士学位。 之后,沃思跨越大西洋,前往加拿大的拉瓦尔大学深造,这所大学位于魁北克,与圣劳伦斯河对岸的魁北克市隔河相望。他于1960年获得了硕士学位。随后,沃思又移居美国加利福尼亚,在加州大学伯克利分校继续深造,并于1963年获得博士学位。 毕业后,沃思受聘于刚刚成立的斯坦福大学计算机科学系。斯坦福大学以其高门槛著称,那为何会看中这位来自欧洲的小伙子呢?原来在20世纪50年代末和60年代初,沃思已经在计算机领域取得了相当引人注目的成就。在苏黎世联邦理工学院时,他曾听过瑞士计算机先驱斯帕塞(A.P. Speiser)的课,并使用过由斯帕塞开发的计算机ERMETH;在拉瓦尔大学时,他学习了数值分析,并使用过Alvac III E计算机;在伯克利,他先是有机会使用Bendix G-15计算机,后来又参与了为IBM 704开发NELIAC编译器的项目。 在撰写博士论文时,沃思决定对Algol 60语言进行改进,并以此作为自己的研究课题,从而设计了他的第一个编程语言——Euler。尽管Euler在实用性上还有不足,但其学术价值极高,为编译器系统设计奠定了良好的基础。也正因为如此,斯坦福大学对沃思产生了兴趣。同时,国际信息处理联合会(IFIP)也注意到了Euler语言,并邀请沃思参与Algol语言的完善和扩充工作。 在参与Algol语言工作组时,沃思提出了一份建议书,经过霍尔(Tony Hoare)等人的修改和完善后,这份建议书得以通过,这就是后来的Algol W语言。1966年,Algol W在斯坦福大学的IBM 360计算机上成功实现并正式应用。 在这个过程中,还有一个有趣的小插曲:当时IBM 360只提供汇编语言和FORTRAN语言,沃思和他的学生认为这两者都不适合作为设计编译器的工具。于是,沃思花了两个星期时间设计了一种新的语言,用于描述Algol编译器,并用了四个月时间在宝来公司的B-5000计算机上完成了交叉编译程序,而他的一个学生则将其移植到IBM 360上。这些额外的工作大大加快了Algol W编译器的开发,同时催生了一个新的语言——PL 360。虽然PL 360最初只是作为辅助工具开发的,但它后来在许多地方得到了应用,取得了意想不到的成功。 Algol W和PL 360的成功奠定了尼克劳斯·沃思(Niklaus Wirth)作为世界级编程语言大师的地位,使他一举成名。但沃思是个具有强烈爱国心的人,成名后,他谢绝了斯坦福大学的挽留,于1967年回到祖国瑞士,先在苏黎世大学任职,但第二年便回到了他的母校苏黎世联邦理工学院(ETH)。 在ETH期间,沃思设计并实现了PASCAL语言(Philips Automatic Sequence CAlculator Language的缩写),这在CDC 6600计算机上开发成功。PASCAL在数据结构和过程控制结构方面都有很多创新。对于前者,除了常见的整型、实型和布尔型数据外,PASCAL还增加了字符型、子域类型、记录结构类型、文件类型、集合类型和指针类型;对于后者,除了保留了无条件转移的GOTO语句外,还增加了if-then-else、case、while、repeat和for等多种控制结构,还允许使用with语句处理记录变量的分量。可以说,现代编程语言中常用的数据结构和控制结构大多数都是由PASCAL语言奠定基础的,因此它在编程语言的发展史上具有承上启下的重要里程碑意义。 有趣的是,沃思开发PASCAL的初衷是为了有一个适合教学的语言,并没有想到它会在商业上得到广泛应用。但一经推出,由于它的简洁明了以及提供的丰富的数据结构和控制结构,PASCAL为程序员提供了极大的便利与灵活性。此外,它特别适合用于微处理器组成的计算机系统,因而大受欢迎,广泛流传。在C语言问世前,PASCAL是风靡全球、最受欢迎的语言之一,创下了发行拷贝数最多的世界纪录。沃思的学生菲力浦·凯恩(Phillipe Kahn)从ETH毕业后,在美国加利福尼亚州创办了一家软件公司,仅PASCAL一项就卖出了超过100万个拷贝,成为百万富翁。 1971年,沃思基于其在开发编程语言和编程实践中的经验,在4月份的《ACM通讯》(Communications of the ACM)上发表了论文《通过逐步求精方式开发程序》(Program Development by Stepwise Refinement),首次提出了“结构化程序设计”(structured programming)的概念。这个概念的核心是:不要求一步就编写出可执行的程序,而是分若干步进行,逐步求精。第一步编写出的程序抽象度最高,第二步的程序抽象度有所降低……最后一步的程序即为可执行的程序。虽然这种方法看似复杂,实际上却有很多优点,使程序更易读、易写、易调试、易维护,并且更易于保证其正确性和验证其正确性。结构化程序设计方法,又称为“自顶向下”或“逐步求精”法,在程序设计领域引发了一场革命,成为程序开发的标准方法,特别是在后来发展起来的软件工程中得到了广泛应用。有人评价说沃思的结构化程序设计概念“完全改变了人们对程序设计的思维方式”,这并不夸张。1983年1月,ACM在纪念《ACM通讯》创刊25周年时,从其1/4个世纪发表的大量论文中评选出25篇“具有里程碑意义的研究论文”,沃思的这篇论文就是其中之一。 PASCAL的成功和结构化程序设计思想的巨大影响并没有让沃思停下继续研究与开发的脚步。20世纪70年代中期,为适应并发程序设计的需要,沃思成功开发了一个广泛应用的语言——Modula。Modula除了提供并发程序设计功能外,还引入了模块概念(这也是该语言命名为Modula的原因)以及“进程”(process)这一重要概念。Modula特别适合于书写系统程序。 但比Modula更重要的是它的第二个版本Modula-2。1976年,沃思再次赴美,到Xerox公司的Palo Alto研究中心参与Alto计算机的设计与开发工作。Alto是世界上第一个具有图形用户界面的个人计算机系统(可惜Xerox公司没有将其商品化,而Apple公司学去了技术并推出了Macintosh)。沃思回到瑞士后,参考Alto的经验,设计并开发了Lilith个人计算机系统。为了与Lilith的体系结构相配合,沃思决定在Modula的基础上开发新版本,即Modula-2。Modula-2相比Modula,语法更加简洁,更加注重界面设计和模块的可重用性。它有三个编译单元,即程序模块、定义模块和实规模块。在定义模块中,只给出模块外部交互所需的信息,而在实规模块中,则给出模块内部实现的详细信息。这样的安排既提高了可读性,又有助于分别编译。Modula-2在优美性和简洁性上更进一步。Lilith的操作系统、图形软件包、数据库系统、网络协议套件、文件服务器等基本系统和大量应用模块全都用Modula-2开发。世界上已经开发了近百个Modula-2的编译系统,北美和欧洲的许多大学已用Modula-2代替PASCAL作为计算机系本科生的第一门程序设计课程。 Modula-2的标准化工作早在1984年由英国开始进行,ISO则于1987年对其进行标准化,并采用由IBM维也纳实验室提出的VDM-SL和经过沃思本人扩充的BNF(即EBNF)表达语言的语法与语义,在形式化方面达到了新的水平。在Lilith项目中,沃思坚持将计算机体系结构、语言和操作环境三者统一考虑,实行集成化、一体化设计的成功经验是具有革命性的创举,使这个项目在计算机科学史上占有重要地位。 后来,沃思致力于一个新的计划,即Oberon计划。Oberon是一个将程序设计语言和操作系统结合在一起的、面向单用户的个人工作站系统。沃思认为,在因特网日益普及的情况下,未来联网的计算机主要将是个人工作站,因此如何使个人工作站功能更加强大、更加方便使用是一个重要课题。沃思将这个计划命名为Oberon,因为Oberon是希腊神话中的仙境之王和女神Titania的丈夫。沃思的目标是使Oberon语言超越PASCAL和Modula,并设计出功能更强大的操作系统和编译器。1992年,他写了两本书向读者推荐Oberon,由此可见他对这个计划的重视。 ACM不仅在1984年授予沃思图灵奖,还在1987年授予他“计算机科学教育杰出贡献奖”。另一个重要的国际学术组织IEEE也给予过沃思两项荣誉:1983年的Emanual Piore奖和1988年的计算机先驱奖(Computer Pioneer Award)。1992年,加州大学伯克利分校还将沃思命名为“杰出校友”。 沃思是在1984年10月于旧金山举行的ACM年会上接受图灵奖的。他在颁奖典礼上发表了题为“从程序设计语言设计到计算机建造”(From Programming Language Design to Computer Construction)的图灵奖演说,回顾了自己在计算机领域的工作。 在演讲中,沃思强调了程序设计语言简洁性的重要性,并讨论了语言所需的硬件和软件环境(因为他一直很重视语言的实现问题)。他还介绍了设计Modula-2和Lilith的经验,指出第一手经验和选择良好开发工具的无比价值。 我见过的另一个Pascal语言的来历,是布莱兹·帕斯卡尔(Blaise Pascal,1623-1662),法国十七世纪著名的思想家。他一生体弱多病,只活了三十九岁,但他留下了不朽的著作和思想遗产。他的主要著作是《外省通信》和《思想录》。前者被认为是法国古典主义散文的奠基之作,后者则在哲学和宗教领域提供了丰富的探讨,是思想伟大的明证。 帕斯卡尔在《思想录》中有一句名言:“思想形成人的伟大。” 他说:“人不过是一根苇草,是自然界最脆弱的东西;但他是一根能思想的苇草。用不着整个宇宙都拿起武器来才能毁灭他;一口气、一滴水就足以致他死命了。然而,纵使宇宙毁灭了他,人却依然要比致他死命的东西更高贵得多;因为他知道自己要死亡,以及宇宙对他所具有的优势,而宇宙对此却是一无所知。” 帕斯卡尔还说:“能思想的苇草——我应该追求自己的尊严,绝不是求之于空间,而是求之于自己的思想。我占有多少土地都没有用;因为在空间上,宇宙囊括并吞没了我,有如一个质点;但由于思想,我却囊括了宇宙。” 我希望大家能有机会读一下这本书,做一根有思想的苇草。