资讯详情

程序设计语言发展回顾与展望

文章转载自:计算机世界网,原始链接地址:http://www2.ccw.com.cn/1995/13/138106.shtml

编者按:程序设计语言与现代计算机共同诞生和发展,已有40多年的历史,已经形成 成为一个大家庭。20世纪80年代以后,随着计算机的日益普及和性能的不断提高,程序设置 计语言发展迅速。

《程序设计语言发展回顾与展望》一文对程序设计语言的发展历程进行了回顾,并对一 评论了著名语言的背景、特点、优缺点及其对程序设计语言发展的贡献。 面向对象方法、语言和支撑环境的特点和缺陷 详细评论了环境的优缺点,并对其发展方向进行了展望。 在《阐述了计算机实时应用中程序设计语言的过去、现在和未来 介绍了一些具有代表性的实时语言的设计和使用,并指出了实时程序设计语言 言语的发展方向。 《三种Windows Basic本文介绍了用于介绍的介绍Windows环境下的Basic语言的发展 情况。对Windows下的CA-Realizer 2.0、GFA Basic 4.1O和Visual Basic 3.0进行了介绍 和比较。 本期技术纵横:奔腾:(Pentium)芯片缺陷。Pentium做双精除法时,芯片会出现 详细介绍了错误的发现过程,分析了缺陷的原因,以及如何使用软件来避免 出现错误。 本期专题连载: 系统集成指南(1) 程序设计语言是人们用语法语义描述来描述计算过程的标志。对计 对于计算机工作人员来说,程序设计语言是除计算机本身以外所有工具中最重要的工具 所有工具的基础。没有程序设计语言的支持,计算机就像一堆废物。由于语言的程序设计 自计算机问世以来的半个世纪里,人们一直在开发和更新更好的程序设计语言 而努力着。随着各种新的程序设计语言和现有种新的程序设计语言和现有的程序设计语言 方言不断出现。有成千上万种程序设计语言已经问世,但只有少数 人们的广泛认可。 第一代程序设计语言是机器语言;第二代语言是汇编语言;第三代语言被称为高 主要有命令语言、函数语言、逻辑语言和对象语言四种类型;第四代语言 言语面向数据库,其实它不仅仅是语言,更是交互式程序设计环境。语言的编程设计 展览主要经历了这四代,有些人称逻辑语言、函数语言甚至对象语言为第五代语言 言。在这五代语言中,前三代语言的发展有明确的先后界限,而后三代语言之间没有这些界限 限,它们仍然在同时发展。 一、"史前"时期 让我们回顾一下人们在计算机问世前为程序设计语言的问世和发展所做的工作 工作为程序设计语言及其理论的出现和发展奠定了良好的基础。 最早的"计算机"它是我们中国的算盘,不知道人们用了多少个世纪。在17世纪Pasca l等人发明了齿轮为基础发明了一种"计算机",它利用齿轮的旋转来控制计算的累积和进位 。上世纪初,英国剑桥大学著名数学家Charles Babbage他的工作使他成为计算机领域的第一个 驱动;他在1822年和1848年分别设计了两种差分机,并在1833年制造了著名的分析机。分 原则上,分析机与当今意义上的计算机非常相似:其主要功能是输入读入穿孔卡并执行输入 算术运算并给出结果,它可以随意重复运算序列。由于这些操作序列Ada Lovelace设计的, 她设计了许多运算序列,可以解决一大类问题。这个运算序列实际上是程序的雏形,它的思维 想一直用到现在,所以Ada被称为世界上第一个程序员(Ada语言以纪念她命名)。1 890年Hollerith开发了一种统计机,它还使用穿孔卡作为各种统计工作。Holler ith因此,公司成立了,未来发展成为公司IBM。英国数学家在20世纪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语言 世界上第一个高级程序设计语言是在20世纪50年代John Backus领导小组开发的FOR TRAN语言。Backus当时开发FORTRAN研究了将这种代数语言翻译成机器语言的可能性 性。因为当时人们最关心的不是这种语言能否设计和编译,而是翻译后的担忧 执行时能否保持一定的运行效率。这种担心影响很大FORTRAN设计方向。最早的一个 FORTRAN版本FORTRAN0是1954年左右设计的,两年后开发了编译程序。与此同时 ,其后继版本FORTRANⅠ与FORTRANⅡ也相继问世。FORTRAN一问世就受到了极大的欢迎和欢迎 快流行起来。 FORTRAN它是一种处处注重效率的语言,从各种成分(如控制句中的表达式和数组上标) 可以看到表达式和子程序参数的传输方式。FORTRAN首先介绍了和汇 编写语言中助记符有本质区别的变量概念,为编程语言中的名称理论奠定了基础。它所 表达式、句子、子程序等概念的引入也是高级程序设计语言的重要基石。但由于FORTRAN是 它的许多成分来自低级语言的土壤"低级"痕迹随处可见。目前常用的FORTR AN版本是FORTRAN77与FORTRAN90。 2.ALGOL语言 ALGOL50年代后开始开发语言。1958年ALGOL两年后,58年后,和ALGOL58风格差 别甚大的ALGOL60发表。ALGOL60与FORTRAN同样用于科学计算的程序设计语言,但它们 风格完全不同,FORTRAN在某种意义上,它可以被视为模块程 虽然这两个概念在当前的内涵和内涵管这两个概念在当前内涵和FORTRAN展示相关设施 示意内涵差别很大),而ALGOL60是一种自由格式的程序设计语言。FOR TRAN由于其高效率和完善的输入输出功能,语言获得了图像IBM这么大的公司司的支持一直受到支持 人们的欢迎,至今仍在科学计算领域内充满了生命力,而ALGOL60由于执行效率低于执行效率FORTR AN而且由于缺乏标准输入输出设施而被应用人员忽视。但这并不是说ALGOL60不及FORTRAN好 ,恰恰相反,ALGOL60在现代程序设计语言的发展中起着重要作用FORTRAN无与伦比的 法估价的。但这并不是说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.OBOL语言 早在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等。 目前,各种风格、各种范型的程序设计语言都在发展着,其中尤以对象式语言的发展势 头最为迅猛。但是面向对象的语言不能解决所有问题,它们正在也应该吸收其它范型的长处 ,成为以对象式范型为主、兼顾其它范型的新型语言。随着软件技术的发展,一定还会有新 的范型问世,相应的语言也会不断问世。一些具特定范型的成功的语言也会向其它范型扩充 ,以增强其自身的生命力。

标签: polo继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台