`

程序之父: Pascal之父:尼克劳斯·沃思(一)

阅读更多
    凡是学过一点计算机知识的人大概都知道“数据结构十算法= 程序”这一著名公式。提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯·沃思(Niklaus Wirth)由于发明了多种影响深远的程序设计语言,并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞士学者。

  沃思1934年2月15日生于瑞士北部离苏黎世不远的温特图尔(Winterthur),其父瓦尔特是一位地理学教授。沃思小时就喜欢动手动脑,组装飞机模型是他的最大爱好。中学毕业以后,沃思进入在欧洲甚至全世界都很有名气的苏黎世工学院(ETH),1958年取得学士学位。之后他远渡大西洋到加拿大的莱维大学深造(Laval是和加拿大名城魁北克隔圣劳伦斯河相望的一座城市),于1960年取得硕士学位。之后他又一次迁移,到美国加利福尼亚,进入加州大学伯克利分校,于1963年获得博士学位。

  学成以后,沃思受聘到斯坦福大学刚刚成立的计算机科学系工作。著名的斯坦福大学门槛极高,怎么会看中了这个来自欧洲小国的毛头小伙子呢?原来在20世纪50年代末、60年代初的情况下,沃思的计算机经验和成就相当引人注目:在苏黎世工学院时,他曾听过瑞士的计算机先驱斯帕塞(A.P.Speiser,他曾出任IFIP的主席)的课,用过由斯帕塞开发的计算机ERMETH(虽然作为学生,机会并不多);在莱维大学时,沃思学了数值分析,用过 Alvac III E计算机(虽然这台计算机经常出故障而不能开机);在伯克利时,沃思先是有一台Bendix G-15计算机可用,后来又参加了为IBM 704开发 NELIAC语言编译程序器的科研小组。 NELIAC的全称是 Navy Electronics Laboratory International Algol Compiler,即美国海军电子学实验室国际 Algol编译程序语言,该语言用于数值计算和一些逻辑处理,其特点是用自己的语言写自己的编译程序,然后进行自编译,是一个类似于 Aled 58但具有开创性意义的语言。沃思在撰写博士论文时,Algol 60报告已经发表。 这是第一个清晰定义的语言,其语法是用严格公式化的方法说明的。当时已有一些学者认识到,清晰的规格说明对于可靠而有效的实现是必需的,但是并不充分:Aled 60报告中还存在一些缺陷和不足。

  沃思在和 Algol的设计者之一、荷兰人范·维京格尔藤(Andrian van Wijingaarden,他曾任阿姆斯特丹数学中心计算部主任,在开发Algol 68中提出了二级文法,又叫w文法以解决上下文有关这一难题。他曾启发1972年图灵奖获得者狄克斯特拉走上计算机科学之路)多次接触和讨论以后,决定对 Algol 60作进一步改进,并以此作为自己的博士论文课题。这就诞生了由沃思所设计的第一个语言——Euler。Euler虽然在实用性上考虑并不十分周到,但在学术上却非常优美,为编译器的系统设计创造了一个很好的基础。此外,它还对 Algo 60进行了若干扩充,主要是增加了表处理能力。正是由于以上原因,斯坦福大学看中了沃思。与此同时,IFIP也注意到了Euler语言,决定吸收沃思参加对Algol语言进行完善与扩充的工作小组。当时,这个小组中有两派,一派主张设计一个新语言,以便树立一个新的里程碑;另一派则觉得时间太紧,主张对 Algo 60进行适当扩充。沃思参加进去以后,自称同时属于这两派,并提交了一份建议书。这份建议书经过霍尔(Tony Hoars)等人的修改、完善以后获得通过,这就是Aigol W(W是沃思名字的首字母)。

  第二年,也就是1966年,Algol W在斯坦福大学的第一台 IBM 360上成功实现并正式应用。这中间还有一个小插曲:IBM 360当时只提供汇编语言和 FORTRAN语言,但沃思和他的学生都觉得这两者并不适宜于作为设计编译器的工具。于是,沃思用了两个星期时间写出了一个用来描写Algol编译器的新的语言的定义,然后用了4个月时间在宝来公司的B-5000计算机上完成了交叉编译程序,而沃思的一个学生则把这个交叉编译程序移植到 IBM 360上去。这些额外的工作极大地加快了 Algol W编译器的开发,同时催生了一个新的语言 PL 360。 PL 360虽然是作为辅助工具而设计、开发的,但后来却在许多地方获得应用,取得了意想不到的成功。

  Algol W及 PL 360奠定了沃思作为世界级程序设计语言大师的地位,一举成名。但沃思是一个具有强烈爱国心的人,成名后的他谢绝了斯坦福大学的挽留,于1967年回到祖国,先在苏黎世大学任职,但第二年就回到他的母校苏黎世工学院。在这里,他首先设计与实现了 PASCAL语言(Philips Automatic Sequence CAlculator Language的缩写),这是在 CDC 6600上开发成功的。 PASCAL在数据结构和过程控制结构方面都有很多创造。对于前者,除一般的整型、实型、布尔型数据外,PASCAL还增加了字符型、子域类型、记录结构类型、文件类型、集合类型和指针类型;对于后者,除保留了无条件转移的GOTO语句外,又增加了if-then-else、case、while、repeat和for等多种控制结构,还允许复合语句和处理记录变量的分量使用with语句这种编写形式。可以说,现代程序设计语言中常用的数据结构和控制结构绝大多数都是由PASCAL语言奠定基础的,因此它在程序设计语言的发展史上具有承上启下的重要里程碑意义。

  说来有趣,沃思开发PASCAL的初衷是为了有一个适合于教学的语言,并没有想到商业应用。但一经推出,由于它的简洁明了,它所提供的丰富的数据结构和控制结构为程序员提供了极大的方便与灵活性,也由于它特别适合于由微处理器所组成的计算机系统,竟然大受欢迎,广泛地流传开来。在C语言问世以前,PASCAL是风靡全球、最受欢迎的语言之一,创下了发行拷贝数最多的世界记录。单是沃思的一个学生菲力浦·凯恩(Phillipe Kahn),从 ETH毕业以后,在美国加利福尼亚州办了一个软件公司,就卖出了100多万个PASCAL拷贝,成为百万富翁。

  1971年,沃思基于其开发程序设计语言和编程的实践经验,在4月份的 Communications of ACM上发表了论文“通过逐步求精方式开发程序’(Program Development by Stepwise Refinement),首次提出了“结构化程序设计”(structure programming)的概念。这个概念的要点是:不要求一步就编制成可执行的程序,而是分若干步进行,逐步求精。第一步编出的程序抽象度最高,第二步编出的程序抽象度有所降低…… 最后一步编出的程序即为可执行的程序。用这种方法编程,似乎复杂,实际上优点很多,可使程序易读、易写、易调试、易维护、易保证其正确性及验证其正确性。结构化程序设计方法又称为“自顶向下”或“逐步求精”法,在程序设计领域引发了一场革命,成为程序开发的一个标准方法,尤其是在后来发展起来的软件工程中获得广泛应用。有人评价说沃思的结构化程序设计概念“完全改变了人们对程序设计的思维方式”,这是一点也不夸张的。1983年1月,ACM在纪念 Communications of ACM创刊 25周年时,从其 1/4个世纪发表的大量论文中评选出有“里程碑意义的研究论文” 25篇,每年1篇,沃思的这篇论文就是其中之一。

  PASCAL的成功也罢,结构化程序设计思想的巨大影响也罢,都没有停止沃思继续创造性的研究与开发工作。20世纪70年代中期,为适应并发程序设计的需要,沃思又成功开发了一个获得广泛应用的语言Modula。M0dula除了提供并发程序设计功能之外,另外一个重要特征是引进了模块概念(这也是这个语言叫做Modula的原因)。此外,它还引进了“进程”(process)这一和并发程序相联系而产生的重要概念。Modula语言还特别适合于书写系统程序。但是,比Modula具有更加重大得多意义的却是它的第二个版本Modula.2。这是 1976年,沃思再次赴美国,到 Xerox公司的 Palo Alto研究中心参与Alto计算机的设计与开发工作。Alto是世界上第一个具有图形用户界面的个人计算机系统(可惜Xerox公司没有把它商品化,而由Apple公司学去了它的技术而推出 Macintosh)。

  沃思回到瑞士以后,参考Alto的经验,设计、开发Lilith个人计算机系统。为了和Lilith的体系结构相配合,沃思决定在Modula的基础上开发新版本,作为整个系统的开发语言。Modula-2与Modula相比,语法更加简洁,更加强调界面设计,模块的可重用性更好。它共有3个编译单元,即程序模块、定义模块和实规模块。在定义模块(definition module)中,只给出那些和模块外部交往所必需的信息。例如,对模块内部的子程序说明而言,在定义模块中只给出子程序名、参数名及其类型等,而不给出子程序体本身,也就是说,在定义模块中只给出模块外部可见的信息。在实规模块(implementation module)中,则给出那些在模块外部不可见的信息,例如,在模块内部定义的子程序说明的子程序体。这样的安排既提高了可读性,又有助于分别编译。M0dula-2在优美性(elegance)和简洁性(simplicity)两方面都比Modula更进一步。

  Lilith的操作系统、图形软件包、数据库系统、网络协议套件、文件服务器等基本系统和大量应用模块全都是用M0dula-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(见后),可见其对这个计划的重视。
分享到:
评论

相关推荐

    十个pascal程序

    "十个Pascal程序"这个主题可能包含一系列用于教学或实践的示例代码,帮助用户理解Pascal语言的基础和高级特性。 1. **基本语法**:Pascal的源代码以`.pas`为扩展名。基础语法包括变量声明(如`var x: Integer;`),...

    Pascal程序设计基础(课件)

    Pascal程序设计基础是计算机科学中的一个重要组成部分,尤其对于初学者和信息学奥林匹克竞赛的参与者而言,掌握Pascal语言的基本概念和特性至关重要。Pascal语言由瑞士的Niklaus Wirth教授于1968年设计,其目标是...

    编译原理课程设计:PASCAL子集语言编译器.zip

    编译原理课程设计:PASCAL子集语言编译器

    Essential Pascal 中文版.rar

    《Essential Pascal》是一本深入介绍Pascal编程语言的书籍,中文版的发布为中文学习者提供了方便。Pascal是一种结构化、静态类型的编程语言,它在教学和科研领域广泛应用,同时也是Delphi和Free Pascal等开发环境的...

    Pascal 语言编辑器

    Pascal作为一种结构化编程语言,自1968年由瑞士的Niklaus Wirth教授设计以来,已经历了数十年的发展,成为教育和科研领域广泛使用的编程语言之一。Pascal语言因其清晰的语法结构和严格的类型检查,被视作学习编程...

    计算机基础入门编程教程(PASCAL)

    1. **程序单位**:PASCAL程序由一个或多个程序单位组成,每个单位可以包含声明、常量、类型、变量、过程和函数定义。 2. **声明**:在PASCAL中,必须先声明后使用。声明包括变量、常量、类型和过程/函数声明。 3. ...

    Pascal语言基础教程 pdf

    - **数组**:一维数组、多维数组的应用。 - **字符串处理**:字符数组与字符串的操作。 - **数据类型**:枚举类型、子界类型、集合类型以及记录类型的使用。 - **过程与函数**:学习过程和函数的设计与调用。 - **...

    PASCAL语言(完整版)电子书

    PASCAL是一种结构化编程语言,由尼尔斯·杰宁斯(Niklaus Wirth)在1968年设计,旨在教授编程概念,特别是结构化编程。它以其清晰的语法和严格的类型检查而闻名,对后来的编程语言如C、C++和Java产生了深远影响。这...

    pascal课件

    9. **程序结构**:Pascal程序由一个或多个单元(units)组成,每个单元可以包含声明、实现和接口部分,这有助于组织和重用代码。 10. **标准库**:Pascal有标准库,包含各种实用的函数和过程,如数学运算、字符串...

    10个简单的Pascal程序

    Pascal是一种结构化编程语言,由Niklaus Wirth在1968年设计,旨在教育初学...每完成一个程序,都是对编程思维的锻炼和对Pascal语法的深入理解。学习者应该逐个解析并运行这些程序,以巩固理论知识并提高实际编程技能。

    词法分析程序Pascal

    在Pascal程序的词法分析过程中,还需要处理诸如类型声明、数组声明、过程和函数声明等复杂结构,确保每个词法元素都能正确对应到Pascal语法规则的一部分。 在压缩包中的“词法分析”文件,可能是实现上述功能的...

    信息学奥赛 PASCAL 程序设计基础复习题

    从给定的文件信息中,我们可以提炼出一系列与信息学奥赛PASCAL程序设计基础相关的知识点,这些知识点涵盖了计算机的基础组成、数据单位、计算机语言、算法基础以及PASCAL和C语言的具体特性。 1. **计算机的主要组成...

    Pascal 教程(非常详细)

    1. **程序组成**:每个Pascal程序由程序首部和程序体两部分组成。程序首部包含程序标识(如"program")和程序名,程序体包括说明部分(变量、常量等的定义)和执行部分(程序的实际操作)。 2. **程序首部**:程序...

    pascal 语言基础 txt版

    Pascal是一种高级程序设计语言,由瑞士计算机科学家Niklaus Wirth在1968年开发,首次公开于1971年,并在1975年形成了“标准Pascal”。Pascal是基于ALGOL60发展而来的一种结构化语言,主要用于教学和系统软件的编写,...

    Pascal基础教程(Word文档).rar

    Delphi,是一个基于Pascal语言的集成开发环境(IDE),由Borland公司推出,主要用于Windows平台的应用程序开发,它将Pascal语言的强大功能与图形用户界面(GUI)紧密结合,使得开发者可以高效地创建桌面应用程序。...

    test_pascal_

    描述中的 "When we discover that an anonymous email exists" 提到匿名邮件的情况,这可能是一个程序或脚本,用于处理电子邮件数据,尤其是在Pascal语言环境中。然而,由于提供的标签仅是"Pascal",我们可以假设这...

    pascal的学习必备

    **Pascal语言学习指南** ..."全国青少年信息学奥赛培训教程 PASCAL语言培训教程.pdf" 这份教程无疑是开始Pascal之旅的良好起点。通过深入阅读和实践,你将能够逐步掌握这门语言,并领略到它的魅力。

    信息技术奥赛参赛语言-pascal教程

    Pascal语言在教育领域广泛使用,尤其在信息技术奥赛(NOI,National Olympiad in Informatics)等竞赛中,作为参赛语言之一,它被用来测试选手的逻辑思维和问题解决能力。 **Pascal的关键特性** 1. **强类型**:...

Global site tag (gtag.js) - Google Analytics