showteam减肥药有效吗:程序设计语言的发展

来源:百度文库 编辑:中财网 时间:2024/05/05 17:50:38
2008-12-31 09:23:54.0      来源:中国IT实验室
自1946年世界上第一台电子计算机问世以来,计算机科学及其应用的发展十分迅猛,计算机被广泛地应用于人类生产、生活的各个领域,推动了社会的进步与发展。特别是随着国际互联网(Internet)日益深入千家万户,传统的信息收集、传输及交换方式正被革命性地改变,我们已经难以摆脱对计算机的依赖,计算机已将人类带入了一个新的时代—信息时代。
新的时代对于我们的基本要求之一是:自觉地、主动地学习和掌握计算机的基本知识和基本技能,并把它作为自己应该具备的基本素质。要充分认识到,缺乏计算机知识,就是信息时代的“文盲”。
对于理工科的大学生而言,掌握一门高级语言及其基本的编程技能是必需的。大学学习,除了掌握本专业系统的基础知识外,科学精神的培养、思维方法的锻炼、严谨踏实的科研作风养成,以及分析问题、解决问题的能力的训练,都是日后工作的基础。学习计算机语言,正是一种十分有益的训练方式,而语言本身又是与计算机进行交互的有力的工具。
一台计算机是由硬件系统和软件系统两大部分构成的,硬件是物质基础,而软件可以说是计算机的灵魂,没有软件,计算机是一台“裸机”,是什么也不能干的,有了软件,才能灵动起来,成为一台真正的“电脑”。所有的软件,都是用计算机语言编写的。
计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。
1. 机器语言
电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。而且,由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的。机器语言,是第一代计算机语言。
2. 汇编语言
为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“ADD”代表加法,“MOV”代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。
汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。
3. 高级语言
从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1 9 5 4年,第一个完全脱离机器硬件的高级语言—F O RT R A N问世了,4 0多年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pas cal、C、PROLOG、Ada、C++、VC、VB、Delphi、JAVA等。
高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业化、流水线式的工业化生产。
6 0年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是人自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计算机界,史称“软件危机”。人们认识到:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。1969年,提出了结构化程序设计方法,1970年,第一个结构化程序设计语言—Pascal语言出现,标志着结构化程序设计时期的开始。
80年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向。这和人们日常处理事物的方式是不一致的,对人而言是希望发生一件事就处理一件事,也就是说,不能面向过程,而应是面向具体的应用功能,也就是对象(object)。其方法就是软件的集成化,如同硬件的集成电路一样,生产一些通用的、封装紧密的功能模块,称之为软件集成块,它与具体应用无关,但能相互组合,完成具体的应用功能,同时又能重复使用。对使用者来说,只关心它的接口(输入量、输出量)及能实现的功能,至于如何实现的,那是它内部的事,使用者完全不用关心,C++、VB、Delphi就是典型代表。
高级语言的下一个发展目标是面向应用,也就是说:只需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理,这就是非过程化的程序语言。
程序设计语言发展回顾与展望
东南大学 徐宝文 南京大学 郑国梁
编者按
程序设计语言是与现代计算机共同诞生、共同发展的,至今已有40余年的历史,早已形
成了规模庞大的家族。进入80年代以后,随着计算机的日益普及和性能的不断改进,程序设
计语言也相应得到了迅猛发展。
《程序设计语言发展回顾与展望》一文对程序设计语言的发展历程进行了回顾,并对一
些著名语言的背景、特点、长处与不足,及其对程序设计语言发展的贡献作出了评述。
《面向对象方法、语言与支撑环境的特征与缺陷》一文对面向对象方法、语言与支撑
环境的优缺点进行了详细的评述,并对其发展方向做出了展望。
《实时程序语言的过去、现在和将来》一文中,阐述了计算机实时应用中对程序设计语
言的特殊要求,介绍了一些具有代表性的实时语言的设计和使用,并指出了实时程序设计语
言的发展方向。
《三种Windows Basic的介绍》一文中,介绍了用于Windows环境下的Basic语言的发展
情况。对Windows下的CA-Realizer 2.0、GFA Basic 4.1O和Visual Basic 3.0进行了介绍
和比较。
本期技术纵横:《奔腾(Pentium)芯片的瑕疵》。文中对Pentium芯片在做双精除法时出
现错误的发现过程做了详细介绍,并分析了这种瑕疵产生的原因,以及如何用软件方法避免
错误的出现。
本期专题连载:
系统集成指南(一)
程序设计语言是人们为了描述计算过程而设计的一种具有语法语义描述的记号。对计
算机工作人员而言,程序设计语言是除计算机本身之外的所有工具中最重要的工具,是其它
所有工具的基础。没有程序设计语言的支持,计算机无异于一堆废料。由于程序设计语言的
这种重要性,从计算机问世至今的半个世纪中,人们一直在为研制更新更好的程序设计语言
而努力着。程序设计语言的数量在不断激增,各种新的程序设计语言以及现有程序设计语言
的方言在不断面世。目前已问世的各种程序设计语言有成千上万个,但这其中只有极少数得
到了人们的广泛认可。
最早的一代程序设计语言是机器语言;第二代语言是汇编语言;第三代语言是所谓的高
级语言,它主要有四种范型:命令式语言、函数式语言、逻辑式语言与对象式语言;第四代语
言是面向数据库的,实际上它不只是语言而且也是交互式程序设计环境。程序设计语言的发
展主要经历了这四代,也有人把逻辑式语言、函数式语言,甚至于对象式语言称为第五代语
言。这五代语言中,前三代语言的发展有明确的先后界限,而后三代语言之间则没有这些界
限,它们仍然在同时发展。
一、"史前"时期
我们先来回顾一下计算机问世以前人们为程序设计语言的问世与发展所做的工作,这些
工作为程序设计语言及其理论的问世与发展奠定了很好的基础。
最早的"计算机"是我们中国的算盘,它被人们沿用了不知多少个世纪。在17世纪Pasca
l等人发明了一种以传动齿轮为基础的"计算机",它用齿轮的转动来控制计算的累加与进位
。上个世纪初,英国剑桥大学著名数学家Charles Babbage的工作使他成了计算机领域的先
驱;他于1822年与1848年分别设计出了两种差分机,并于1833年制造出了有名的分析机。分
析机在原理上与当今意义上的计算机很类似:其主要作用是输入读进穿孔卡片、对输入执行
算术运算并给出结果,它可以随意重复运算序列。这些运算序列是由Ada Lovelace设计的,
她设计了许多可以求解一大类问题的运算序列。这种运算序列实际上就是程序的雏形,其思
想一直沿用至今,因而Ada被称为是世界上第一个程序员(Ada语言就是为纪念她而命名)。1
890年Hollerith研制出了一种统计机,它也使用穿孔卡片,它被用作各种统计工作。Holler
ith因此而成立了一个公司,这个公司以后发展成IBM。本世纪30年代,英国数学家Turing提
出了图灵机的概念,它由一个控制块、一条存储带及一个读写头构成,能执行左移、右移、
在存储带中清除或写入符号、条件转移等操作。图灵机的结构虽然比较简单,但却能完成当
今计算机所能完成的一切运算。随后Church发明了一种以逻辑公式中约束变量的代入为主
要运算的λ-演算,它可以看作是一种语法与语义都非常简单的程序设计语言,已被广泛用在
程序理论与程序设计语言理论与实践的研究中。
二、低级语言时期
1944年,美国哈佛大学的Aiken设计出了MARKI自动程序控制继电器式计算机,它使用了
Babbage分析机的原理,这是世界上第一代自动计算机,其机械结构原理与当代计算机基本相
同,只是速度很慢:加法每秒才3次。1944~1946年间宾夕法尼亚大学的Mauchly与Eckert研
制出了ENIAC电子数字积分计算机。1949年,普林斯顿大学von Neumann研制出了EDVAC电子
离散变量计算机,这是世界上第一台能把可执行的程序放在磁芯中的计算机,从此现代意义
上的计算机便真正诞生了,这台计算机一问世便奠定了所谓von Neumann式体系结构:程序与
数据不加区别地存储在(磁芯)存储器中。它所能处理的最基本的信息单位就是二进制数字
,即计算机只能识别理解由0与1构成的二进制序列。那时人们要用二进制机器代码编成代码
序列(即程序)来控制计算机执行规定的操作。这种代码就是第一代程序设计语言或称机器
语言。机器语言的特点是它能直接反映计算机的硬件结构,用之编写的程序不须作任何处理
即可直接输入计算机执行。编写机器语言程序是一种非常枯燥而繁琐的工作,要记住每一条
指令的编码与含义极端困难,编写出的程序既不易阅读也不易于修改。而且由于机器语言是
特定于机器的,不同的机器有不同的指令系统,人们无法把为一种机器编写的程序直接搬到
另一种机器上运行。一个问题如果要在多种机器上求解,那么就要对同一问题重复编写多个
应用程序。由于机器语言程序直观性差,与人们习惯使用的数学表达式及自然语言差距太
大,故而难学、难记,程序难以编写、调试、修改、移植和维护,限制了计算机的推广作用

由于这一问题的存在,人们设想,能不能用更接近于自然语言与数学语言的语言。经过
努力,第二代语言——汇编语言问世了。汇编语言也是一种面向机器的程序设计语言,
它用助记符号来表示机器指令的操作符与操作数(亦称运算符与运算对象),如,用"ADD"与"
MOVE"分别取代机器语言中的加法与代码移动操作。汇编指令与机器指令之间关系是一对一
的关系,汇编语言程序要经过一特定的翻译程序(即汇编程序)将其中的各个指令逐个翻译成
相应的机器指令后才能执行。汇编语言的问世使人们在编写程序时不必再花较多的精力去
记忆、查询机器代码与地址,编程工作变得容易多了。
尽管与机器语言相比,汇编语言的抽象程度要高得多,但由于它们之间是一对一的关
系,用它编写哪怕是一个很简单的程序,也要使用数百条指令。为了解决这个问题,人们又研
制出了宏汇编语言,一条宏汇编指令可以翻译成多条机器指令,这使得人们的程序设计 工作
量得以减轻一些。为了解决由多人编写的大程序的拼装问题,人们又研制出了连接程序,它
用于把多个独立编写的程序块连接组装成一个完整的程序。虽然汇编语言比机器语言好学
、好记、好用,但由于汇编语言一般都是针对特定的计算机或计算机系统设计的,因此它对
机器的依赖性很强,它的低级性也使得人们不易于用它编写较大的程序,而且在机器语言中
存在的许多其它问题在汇编语言中没有得到很好解决。
三、高级语言初创时期
1.FORTRAN语言
世界上第一个高级程序设计语言是在50年代由John Backus领导的一个小组研制的FOR
TRAN语言。Backus当时一边研制FORTRAN一边研究了将这种代数语言翻译成机器语言的可能
性。由于人们当时头脑中最关心的问题不是这种语言能否设计与编译,而是担心它经翻译后
执行时能不能保持一定的运行效率。这一担心大大影响了FORTRAN的设计方向。最早的一个
FORTRAN版本FORTRAN0是1954年前后设计出来的,其编译程序于两年后研制出来。与此同时
,其后继版本FORTRANⅠ与FORTRANⅡ也相继问世。FORTRAN一问世便受到了极大的欢迎并很
快流行起来。
FORTRAN是一个处处注重效率的语言,这从其各种成分(如控制语句中表达式与数组上标
中的表达式的形式以及子程序参数的传送方式等)就可以看出来。FORTRAN首先引入了与汇
编语言中助记符有本质区别的变量的概念,它奠定了程序设计语言中名字理论的基础。它所
引入的表达式、语句、子程序等概念也是高级程序设计语言的重要基石。但由于FORTRAN是
从低级语言的土壤中破土而出的,其许多成分中"低级"的痕迹随处可见。目前常用的FORTR
AN版本是FORTRAN77与FORTRAN90。
2.ALGOL语言
ALGOL语言是在50年代后开始研制的。1958年ALGOL58问世,过了两年,与ALGOL58风格差
别甚大的ALGOL60发表。ALGOL60与FORTRAN一样都是用于科学计算的程序设计语言,但它们
的风格完全不同,FORTRAN是一个固定格式的块结构语言,在某种意义上它可以看作是模块程
序设计与分别编译概念的始祖(尽管这两个概念在目前的内涵与在FORTRAN中有关设施所展
示的内涵有很大的不同),而ALGOL60则是一个自由格式的分程序结构的程序设计语言。FOR
TRAN语言因其高效率与完善的输入输出功能并得到像IBM这样大的公司的支持,而一直受到
人们的欢迎,至今仍在科学计算领域内充满了生命力,而ALGOL60则因其执行效率不及FORTR
AN以及缺少标准输入输出设施而遭受应用人员冷落。但这并不是说ALGOL60不及FORTRAN好
,恰恰相反,ALGOL60对现代程序设计语言的发展所起的作用是FORTRAN所无法相比的,也是无
法估价的。
ALGOL60因其具有准确而完备的文本以及采用了精确而形式化的语法描述体系——BNF
范式,而备受程序设计语言研究与设计者的青睐(有趣的是,Backus所发明的BNF范式没有用
在他所设计的FORTRAN中而却被成功地用来描述ALGOL60语法)。ALGOL60中孕育了许多很有
用的程序设计与程序设计语言思想,如自由程序格式、保留字、数据类型、分程序概念、子
程序调用方式、递归、动态数据、条件语句与循环语句的形式等,这些概念中有不少在ALG
OL60中就是很成熟的,有的在后来得到了进一步发展。这些思想一直到现在都影响着程序设
计语言的设计。在ALGOL60以后人们以它为基础研制了不少类ALGOL语言,如N.Wirth于60年
代中期研制出了ALGOL-W与Enler语言,此后问世的几个语言,如PL/I、ALGOL68、SIMULA67、
BCPL、PASCAL等,都直接受到了ALGOL60的影响,象MODULA-2、C、OBERON、Concurrent Pas
cal、Ada、SMALLTALK与EIFFEL等目前比较有名的语言也或多或少地受到ALGOL60的影响。
3.COBOL语言
早在50年代后期,美国国防部(DOD)就觉得需要研制一个军用语言,它组织了来自政府、
产业部门等的专家来设计这种语言,COBOL就这样在1959年年底研制出来了。 一年后,RCA与
Remington-Rand-Uniuac公司研制出了可以使用的COBOL编译程序。政府部门与产业部门的
合作使得COBOL得以广泛使用,六、七十年代的大量程序都是用COBOL编写的。80年代以来由
于数据库技术的广泛应用,COBOL的使用受到一定限制,但仍在一定范围内使用着。COBOL对
语言发展的主要贡献是其引入的独立于机器的数据描述概念(它是数据库管理系统中主要概
念的鼻祖)与类英语的语法结构。COBOL的出现,使人们开始意识到计算机不只应用于科学计
算领域,而且还可以进入各种事务处理领域,拓宽了计算机的应用范围。
四、高级语言发展初期
FORTRAN、ALGOL60与COBOL三个语言问世后,在六十年代初期,编译技术与理论的研究得
到了高度重视,在短短几年中得到了很大发展,许多语言翻译中的问题也得到解决,这又反过来
使人们把注意力放在各种新的程序设计语言的研制上,这导致了程序设计语言数目成指数般
的激增。在六十年代的十年中,人们至少研制了200多个高级语言。
前已指出,虽然FORTRAN与COBOL当时已经分别成为科学计算与商业应用的标准语言,但
ALGOL60仍对新语言的设计起着比较大的影响。ALGOL-W与Euler是受ALGOL60影响最大的类
ALGOL60语言中的两个。ALGOL-W的主要贡献是提出了一种叫做值-结果的新的子程序参数传
递方法,并首次引入了分情形语句、记录、指针等重要的语言概念。Euler则试图把过程当作
对象处理并引入了简单优先级分析的技术。对这两个语言的研制为N.Wirth后来研制的Pas
cal取得成功奠定了基础。
在五十年代末至六十年代初期,除了研制了若干普通过程性程序设计语言而外,还有一
些人作了研制其它风格的程序设计语言的尝试,LISP、APL与SNOBOL就是这样的三个程序设
计语言。
1.LISP语言
早在50年代后期,麻省理工学院的John McCarthy就开始了人工智能的研究,他当时致力
于设计一个用表处理的递归系统,这就在60年代初研制出了LISP语言,它是一个用于处理符
号表达式的相当简单的函数式程序设计语言。LISP以数学中的函数与函数作用的概念作为
其设计原理,它奠定了函数式语言的基础。纯LISP语言是完全非von Neumann风格的,它没有
使用ALGOL60等语言中所采用的可修改变量、赋值语句、转向语句等von Neumann结构语言
中的有关概念。LISP程序与其数据结构采用了完全相同的结构形式与处理方式,因此可以相
当方便地用LISP来编写它的解释程序。LISP语言除了用S-表达式来统一处理数据与程序外
,还引入了前缀运算符表示法、递归数据结构、递归控制结构以及新的条件表达式形式。
2.APL语言
APL是一种风格的函数式程序设计语言,但它的设计与LISP没有关系,它是由IBM公司的
K.Iversion于60年代初期设计的,他的目标是设计出一种功能强而且紧凑的表示法。APL采
用和体现了许多数学概念,最初主要用于完全形式地描述 IBM/360系列计算机。APL具有非
常丰富的运算符(尤其是有关数组的各种运算符),使程序员不再需要使用低级重复的、逐元
素的数组操作。
但由于APL使用了非标准字符集,在APL问世后的许多年内,它都没有得以实现,直到60
年代中期才在IBM/360系列机上得以实现。
3.SNOBOL语言
另一个非ALGOL60风格的语言是SNOBOL,它是由贝尔实验室的Farber、Griswold与Polo
nsky研制的,主要用于字符串处理,因此它处理的主要对象是字符串数据,它的复杂的字符串
处理功能是其后各个语言所无法相比的,它目前主要用于模式配领域,其较新且实用的一个
版本是SNOBOL4。
LISP、APL与SNOBOL语言由于与von Neumann体系结构计算机之间存在一定的“语义间隙
”,在一般常规计算机上难以有效地实现:它们都要进行高度动态的资源管理,需要占用大量的
机器资源。但这几个语言都是相应的特定应用领域内非常成功的语言,并一直为这些领域的
用户广泛使用着。例如,LISP语言已成为人工智能研究与应用领域的主要语言之一,APL语言
被广泛用在快速原型及大量涉及到矩阵运算的科学计算领域,SNOBOL4被成功地用在文本处
理领域中。直到现在,这些语言的基本原理仍在研究与产业领域得到广泛的注意。
这几个语言虽然重要,但当时只有少数人在研究它们,绝大多数人的注意力仍然放在过
程性语言(现在也叫命令式语言或强制式语言)上。现在仍来看看六十年代程序语言的发展

4.PS/I语言
60年代初期,IBM公布了一个庞大的计划:研制PL/1语言。它试图把此前问世的所有语言
的好的思想与设施都用到这个语言的研制中,使PL/I成为一个真正通用的、全能的程序设计
语言。它借用了FORTRAN语言中的独立模块概念、ALGOL60中的分程序结构与递归过程概念
、COBOL的数据描述设施以及LISP的动态数据结构概念。除此而外,PL/I还引入了一些新的
设施,比较突出的是异常处理设施与多任务设施。从目前的角度看,PL/I的设施并不很多,但
可能由于它问世得太早,与当时程序设计语言的发展水平不太相称,它没有以统一而协调的
方式把其不同成分与概念有机地融合在一个语言中。而且,它所引入的一些新设施在当时还
没有得到深入彻底的研究,把它们用在一个实用语言中尚欠成熟。所有这些都影响了PL/I的
成功(它的标准定义在十多年后的1976年才正式发布)。PL/I在当时是一个非常大而复杂的
语言,正如E.W.Dijkstra在1972年获图灵奖时的讲演上所指出的:使用PL/I就象驾驶一驾在
驾驶室中要操纵7000个按钮、开关与手柄的飞机。
5.ALGOL69语言
在60年代问世的语言中还有三个比较著名:ALGOL68、SIMULA67与BASIC。ALGOL68是由
FIFIP的一个以von Wijngaarden为首的工作组(即2.1工作组)在参与了ALGOL60设计与修改
工作后,于1968年研制的。ALGOL68中最重要的概念是正交性:即ALGOL68所包含的各种成分
结构可以任意合成,而不会产生不利的或不期望的结果。ALGOL68作了用不同的语言概念相
互配合来提供较高计算能力的尝试。ALGOL68是第一个用完全形式化技术进行描述的语言,
但其描述技术相当复杂,一般人很难以阅读、理解与使用。ALGOL68因其复杂受到了以C.A.
R.Hoare与N.Witrh为代表的一批人的极力反对,它目前主要用在欧洲的一些大学与研究机构
,但其应用很有限。
6.SIMULA语言
SIMULA语言是由挪威计算中心的K.Nygoard与O.J.Dahl研制的,他们先研制了SIMULA1语
言,后来在1967年发展成SIMULA67语言。SIMULA67虽然是基于ALGOL60的,但它不是作为一种
通用语言设计的,而是一种用于处理仿真问题的语言。它的最大贡献是提出了类的设施,类
是一种用一把数据结构及处理用的过程封装在一起的机制。这一概念可以看作是抽象数
据类型之父。类可以分层定义,因而具有继承性,而且在一个程序中可以对同一类动态地生
成(产生)多个实例。类的概念影响了此后许多语言的设计,其中比较著名的语言有:CLU、M
odula-2、Ada、SMALLTALK、C++等。类概念的提出奠定了面向对象程序设计技术与语言的
基础。另外,它的共行程序可以看作是并行处理设施的雏形。
7.BASIC程序
BASIC语言也是在60年代中期问世的语言,现在仍被广泛使用着。它具有简单的语法形
式与有限的数据结构与控制结构。它的流行得益于它的简单性、实现的方便性与高效率,但
它本身并没有引入什么新的语言概念,从实现角度看,它倒是第一个支持高度交互式的解释
型程序设计风格的实用工具。目前,BASIC主要用作教学工具。在我国,主要用在中小学生、
高等专科学生与师范学生等的教学中。
在程序设计语言发展初期的十来年中,人们对语言研究的注意力主要放在新语言成分及
拥有新的语言成分的语言上,而极少从软件开发及程序设计方法的角度来设计语言。因此在
那时所设计的语言中有许多从现在的观点看一无是处。但不管怎么说,那时所研制的许多语
言在目前仍被人们研究着、使用着,在程序设计语言的发展史上也是值得大书特书的。
五、结构程序设计时期
1968年E.W.Dijkstra给COMM.ACM杂志编缉写了一封信,指出了语言中转向语句使用上带
来的问题,从而引发了程序设计语言中要不要使用转向语句的讨论,这场讨论使人们开始注
重对程序设计方法进行研究,从而导致了结构程序设计这一新的程序设计方法问世。但在最
初,人们一直认为结构程序设计就是不用或少用转向语句的程序设计,因此这一技术在语言
研究中的反映就是研究用于代替转向语句的程序结构与语言成分。为此人们研制了各种各
样的语句结构,主要是各种条件结构与循环结构。Dijkstra曾证明,任何程序都可以只用顺
序、选择、循环这三种结构的语句来构造,任何(包含转向语句的)程序都可以转换成等价的
只包含这三种语句的程序。这三种控制结构因此而被称为是D-结构(还有另一种扩充的
结构叫做DREC-结构)。1974年D.Knuth在一篇文章中指出,转向语句与结构程序设计之间没
有本 质的对立,在使用结构程序设计技术时可以运用转向语句,因此可以在语言成分中仍保
留转向语句,在功能上不加控制,但应限制其应用范围。
虽然现在大多数语言中都保留了转向语句,但其功能与结构却得到了大大简化。在高级
语言刚刚问世的时候,由于高级语言刚由低语言脱胎出来,而低级语言中的主要控制结构是
转移指令,因此那时的高级语句中对转向语句的设计都比较重视,这才出现了ALGOL60中的开
关说明与FORTRAN中的多种转向语句。而如今,随着人们对程序设计本质的认识越来越深入
,转向语句的形式与功能都变得很简单,只用于辅助其它控制结构。另外,从这一段时期开始
问世的各个语言的其它控制结构也变得简单了,比较有名的语言有Pascal、Modula、Modul
a-2、BLISS、Euclid、Edison、Gypsy、CLU、XCY-2、SMALLTALK、C.Ada等。
1.Pascal语言
N.Wirth一直主张程序设计语言应精致简明,他在参与ALGOL68研制时就对之持不同意见
,他在研制了ALGOL-W与Euler之后又推出了一个全新的语言Pascal。Wirth研制这个语言的
目的旨在设计一种用于教学与编写系统软件的简明的语言。Pascal最定义与实现于1971年
,1973年对之修了修改并重新实现,但它直到70年代末才得到人们的广泛重视。目前,Pasca
l已广泛用在教学与各种软件研制中,ISO和包括我国在内的许多国家都制定了Pascal标准。
Pascal除了吸收了ALGOL60的许多有益成分外,也采用了ALGOL-W的WHILE与CASE语句结
构、ALGOL68的用户定义数据类型等有益成分。它极大地支持着结构程序设计思想,其以用
户定义数据类型为基础的数据结构构造设施使数据抽象进入了一个新的层次,其后的Pasca
l公理语义引起了人们对Pascal的更大关注。Pascal也有一些问题,如部分歧义性问题、指
针问题、动态数组问题等。
N.Wirth在完成了Pascal的设计与实现之后不久又开始了支持多道程序设计与模块化程
序设计的有关语言机制的研究,并在70年代后期研制出了Modula语言,后来又发展成Modula
-2语言。Modula-2几乎体现了Pascal的所有思想与设施并增加了模块设施。Wirth后来又研
制了一个新的更简明的语言Oberon,对Modula-2的记录类型机制等作了扩充和大量裁剪。
2.Ada语言
到了结构程序设计语言发展的巅峰,DOD推出了Ada语言。Ada的设计是雄心勃勃的,它以
可靠性、可维护性(可读性)、高效率等作为设计目标,试图集当代过程性程序设计语言的优
秀思想之大成,研制成一种在三军通用的标准程序设计语言。它的主要应用领域是嵌入式系
统,嵌入式系统具有可靠性要求高、规模大、复杂性高、费用高、使用周期长等特点。
Ada是用工程化方法开发出来的。在70年代中后期,DOD为研制这样一个语言专门成立了
一个高级语言工作组(HOLOG),HOLWG提出了草人、木人、锡人、铁人、钢人等一系列的逐步
完善的语言设计要求。在广泛招标的基础上,法国J.D.Ichbiah中标。Ada几经修改后于198
3年正式成为美军用标准语言。
Ada是在Pascal的基础上研制出来的,它在Pascal基础上增加、扩充了数值计算、
输入/输出、数据抽象、并发处理、实时处理、异常处理以及与机器有关的设施。它集中体
现了软件工程学、程序设计语言学、程序设计方法学的优秀研究成果,能大力支持程序模块
性、可移植性、可扩充性、抽象与信息隐藏,有助于高效的开发与维护程序。但Ada也受到
了以C.A.R.Hoare为代表的一些软件专家的指责,主要问题是Ada过于庞大、过于复杂。但不
管如何,DOD支持Ada的决心一直未变,而且它也在一些应用中得到了很大的好处。
Ada在发展着,新近推出的Ada-9x对Ada作了面向对象的扩充,主要扩充的内容有:支持对
象与类的机制、类库、并发处理机制等。Ada可望在今后若干年内仍是主要的软件开发语言

3.C语言
在结构程序设计时期,由于软件工程强调抽象,这个时期推出的语言越来越"高级",越来
越抽象。但与此同时,一个并不高级也并不很抽象的语言却脱颖而出,这便是C语言。C是作
为系统程序设计语言于1973年研制出来的。C的成功得益于它有一个好的机会;那时的高级
语言基本都不适合开发系统软件,系统软件基本都是用机器语言或汇编语言编写的,而C的许
多类汇编语言特征却使它大获成功。C语言的表达式比较简洁、具体丰富的运算符,有比较
现代的控制结构与数据结构,它不是一个大语言,也不是一个很高级的语言(只能算一个中
级语言),它目前的应用范围已不限于系统软件开发,已成为目前最流行的语言之一。C语言
的主要不足在于它并没有完全体出好的程序设计思想。在使用C时可能会走入歧途。C由于
过于注重开发与运行效率而使其程序的可读性较差。
六、第四代语言
第四代语言(4GL)是与第三代语言及其它新型设计语言同时发展的,它与前三代语言的
主要区别是,它侧重于描述程序"做什么"而不是"如何做",函数式语言与逻辑式语言均有此
特征,而高级语言与低级语言相比,也显现出一些这种特征。第四代语言主要有如下三种:
·数据库及查询语言;
·应用生成程序;
可执行规格说明语言。但目前以前两种最为重要。随着诸如数据库系统、电子表格软
件、统计软件包及其它(专用)软件包越来越多的使用,非专业人员就需要使用一种用于对它
们进行管理控制的媒介,这便是第四代语言。严格地讲,第四代语言实际上并不只是语言,而
是一个交互式程序设计环境。
SQL是最著名的数据库查询语言,它是IBM公司开发的一种关系数据库查询语言。程序生
成程序或应用生成程序一般都基于某种特定的规格说明方法并能按一定的规格说明产生相
应的输出(如高级语言程序)。目前已有大量第四代语言问世,如ADF、IDEAL、NATURAL、NO
MAD、MANTIS、MAPPER、RAMIS等。
七、多范型程序设计语言时期
在高级程序设计语言问世以后的几十年内,尽管在60年代问世了LISP、APL与SNOBOL4等
非过程式(非强制式)程序设计语言,但仍然是过程性语言的天下。但自从J.Backus在1978年
图灵奖获奖讲演中指出了传统过程性语言的不足之后,人们开始把注意力转向研究其它风格
、其它范型的程序设计语言。目前已被人们研究或应用的非过程式语言范型主要有:函数式
语言、逻辑式语言、面向对象式语言与关系式语言等几种。
1.函数式语言
函数式语言也叫作用式语言。纯函数式语言中不使用赋值语句,其语法形式很类似于数
学上的函数,故得名。典型的函数式语言有LISP、APL与ML等。
2.逻辑式语言
逻辑式语言也叫说明式语言、基于规则式语言,以逻辑程序设计思想为理论基础,其主
要核心是事实、规则与推理机制。事实与规则用于表示信息(知识),而推理机制则用于根据
事实与规则产生执行结果。程序中不需要显式定义控制结构。其中最有代表性的逻辑式语
言是PROLOG。PROLOG是由法国马塞大学人工智能研究室的Roussel、Colmerauer与英国爱丁
堡大学人工智能系的Kowalsik合作于70年代初期研制出来的。自1981年日本政府宣布第五
代计算机系统(FGCS)项目以PROLOG为基础以来,PROLOG已成为人工智能研究领域的主导语言

3.面向对象式语言
面向对象式语言简称对象式语言,它与传统过程性语言的主要区别在于:在传统过程性
语言中把数据以及处理它们的子程序当作互不相关的成分分别处理,而在对象式语言中则把
这两者统一作为对象封装一起进行处理。面向对象的思想是G.Booch在研究Ada软件开发方
法时首先提出来的,而对象式语言中的一个重要概念是类,类最早是在SIMULA67语言中提出
与实现的。但SIMULA67本身并不是一个面向对象的语言,而Ada也只是一个基于对象的语言
。完全面向对象的语言有SMALLTALK、C++、EIFFEL等。SMALLTALK是A.Kay于80年代初研制
出来的,他在研制这个语言之前已先期研制了FLEX语言。在SMALITALK中对象之间通过消息
进行通信,在一对象中向消息返回一个对象。
C++是在C的基础上扩充而成的,是C的超集。它在C的基础上扩充了类、对象、多继承、
运算符重载等面向对象的概念。EIFFEL是一个以可再用性与可扩充性作为其主要目标的对
象式语言,于80年代中期问世。EIFFEL是一个强类型语言,其主要成分是用于表示抽象数据
类型的类。面向对象的概念与语言目前尚不完全成熟,还处于进一步发展中。
随着各种范型的程序设计方法的研究,各种范型的相互渗透,目前许多语言都不止体现
了一种范型,如Modula.2、Ada等强制式语言中都体现了面向对象式范型的思想,而C++、EI
FFLE等对象式语言中则充满了强制式语言的思想;再如,LOGLISP与FUNLOG兼有函数式与逻辑
式范型的思想,LEAF与TABLOG兼有关系式与逻辑式范型的思想,LEAF与TABLOG兼有关系式与
逻辑式范型的思想,而LOOPS语言则把函数式、对象式、逻辑式与存取式多种范型有机地结
合在一起。在80年代中期问世的还有一个有名的多范型语言Nial,它支持强制式与函数式范
型,而新扩充的Nial版本还可以支持逻辑式与对象式范型。
由于每一种范型尽管有其长处但也有其局限性,现在程序设计语言的一大发展趋势就是
把各种范型的思想都尽可能融合在一个语言中,以支持不同要求、不同风格的程序设计应用

八、结束语
本文对程序设计语言的发展过程进行了回顾,对各个时期问世的主要程序设计语言的背
景、特点、贡献及不足作了讨论。所讨论的语言中有不少都被进行了扩充(形成超集)、缩
减(形成子集)或既作扩充、缩减又作适当修改(形成方言)。例如,Pascal语言就有如下超集
、子集或方言(变种):Concurrent Pascal、Parallel Pascal、Pascal Plus、Pascal/R、
Pascal-SC、UCSD Pascal、Quick Pascal、MS Pascal、Objective Pascal等。
目前,各种风格、各种范型的程序设计语言都在发展着,其中尤以对象式语言的发展势
头最为迅猛。但是面向对象的语言不能解决所有问题,它们正在也应该吸收其它范型的长处
,成为以对象式范型为主、兼顾其它范型的新型语言。随着软件技术的发展,一定还会有新
的范型问世,相应的语言也会不断问世。一些具特定范型的成功的语言也会向其它范型扩充
,以增强其自身的生命力。