程序设计语言的历史回顾与分类.doc_第1页
程序设计语言的历史回顾与分类.doc_第2页
程序设计语言的历史回顾与分类.doc_第3页
程序设计语言的历史回顾与分类.doc_第4页
程序设计语言的历史回顾与分类.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计语言的历史回顾与分类程序设计语言发展迅速,到目前还丝毫没有规范到统一语言的迹象,我们要学习它,应该从它的历史发展开始,展开它的全貌,从发展中了解为什么老的不行要有新的。分类使我们简化了问题,研究一类中的一个、两个代表就可以。程序设计语言简史:1945年第一台现代计算机ENIAC问世,它用真空管做计算,一下子比当时最快的电动机械计算机快攻300倍(每秒300次乘法)。存储器非常小,计算指令(即程序)由外部插座和开关馈入。还不能称之为完全自动计算。1946年 冯诺依曼在一篇论文中建议:(1)计算机应采用二进制。(2)计算机的指令和数据都可以放在存储器内。这就是奠定现代计算机的著名的冯诺依曼原理: CPU逐条从存储器中取出执行指令,按指令取出存储的数据经运算后送回。数据和指令(存储地址码、操作码)都统一按二进制编码输入。数据值的改变是重新赋值,即强行改变数据存储槽的内容,所以说它是命令式的(IMPERATIVE)。1951年美国兰德公司的UNIVA C-1 是第一台按冯诺依曼原理制成的通用自动计算机。1人们首先开始了机器语言的程序设计: 指定数据区编制一条条指令。由于任何人也无法记住并自如地编排二进制码(只有1和0的数字串),则用8、16进制数写程序,输入后是二进制的。程序的外部表示和内部的存在一开始就是分离的。2单调的数字极易出错,众不堪其苦,将操作码改作助记的字符,汇编语言使编程方便得多。但汇编码编的程序必须要通过汇编程序翻译为机器码才能运行。尽管汇编码程序和机器码程序基本一一对应,但汇编语言出现说明两件事:一是开始了源代码自动翻译器目标代码的使用方式,一是计算机语言开始向宜人方向的进程。 350年代高级语言出现1954年BACKUS根据地1951年RUTISHAUSER提出的用编译程序实现高级语言的思想,研究出第一个脱离机器的高级语言FORTRAN 。其编译程序用18个人一年完成(用汇编语言编写)。1957年的FORTRAN,它就比较完善了。它有变量、表达式、赋值、调用、输入 输出等概念;有满足科技计算的整数、实数、复数和数组,以及为保证运算精度的双精度等数据类型。表达式采用代数模型。 FORTRANR 的出现使当时科技计算为主的软件生产提高了一个数量级,奠定了高级语言的地位。FORTRAN也成为计算机语言界的英语式的世界语。1958年欧洲计算机科学家的一个组织GAMM(德国应用数学和机械学协会)和美国计算机协会ACM的专家在苏黎士会晤起草了一个“国际代数语言IAL”的报告,随后这个委员会研制了ALGOL58得到广泛支持和响应。 1960年欧美科学家再度在巴黎会晤对ALGOL 58进行了补充,这就是众所周知的ALGOL60。1962年罗马会议上对ALGOL60再次修订并发表了对“算法语言ALGOL 60的修订报告”。由于该报告对ALGOL 60定义采用相对严格的形式语法,ALGOL语言为广大计算机工作者接受,特别在欧洲。但美国IBM公司,当时经营世界总额75%的制造商,一心要推行FORTRAN,不支持ALGOL,以致ALGOL 60 始终没有大发展起来。尽管如此,ALGOL 60还是在程序设计语言发展史上是一个重要的里程碑。1959年为了开发在商用事务处理方面的程序设计语言,美国各厂商和机构组成一个委员会。在美国防部支持下于1960年4月发表了数据处理的COBOL 60语言。开发者的目标要尽可能英语化,使没有计算机知识的老板们也能看得懂。所以像算术运算符+、*都用英文ADD、MULTIPLY。COBOL 60 的控制结构比FORTRAN还要简单,但数据描述大大扩展了,除了表(相当于数组)还有纪录、文件等概念。 COBOL 60 虽然繁琐(即使一个空程序也要写出50个符号),由于其优异的输入 出功能,报表、分类归并的方便快速,使它存活并牢固占领商用事务软件市场,直到今天在英语国家的商业领域还有重要的地位。 50年代计算机应用在科学计算和事务处理方面有了FORTRAN,COBOL因而得到迅速发展。工程控制方面刚刚起步,仍是汇编语言的市场。 1957年,美MIT科学家MCCARTHY提出LISP,并把它用于数学定理验证等较为智能性的程序上。但LISP在当时只是科学家的语言,没有进入软件市场。460年代奠基性研究 60年代计算机硬件转入集成电路成本大幅度下降。应用普及的障碍是语言及软件。这就促使对编译技术的研究。编译技术的完善表现在大型语言、多种流派语言的出现。 1962年哈佛大学的K. IVERSON提出APL语言。它是面向数学(矩阵)的语言,定义了一套古怪的符号,联机使用非常简洁,觉得数学家喜爱。它提出动态数据(向量)的概念。1962年AT&T公司贝尔试验R. GRISWOL提出正文处理的SNOBOL,可以处理代数公式、语法正文、自然语言。以后发展为SNOBOL 3、SNOBOL 4。80年代后裔叫ICON,用于测试。1963-64年美国IBM公司组织了一个委员会试图研制一个功能齐全的大型语言。希望它兼有FORTRAN和COBOL的功能,有类似ALGOL 60完善的定义及控制结构,名字就叫程序设计语言PL /1。程序员可控制程序发生异常情况的异常处理、并行处理、存储控制等。所以它的外号叫“大型公共汽车”。它是大型通用语言的第一次尝试,提出了许多有益的新概念、新特征。但由于过于复杂,数据类型自动转换太灵活,可靠性差,低效,使它没有普及起来。但IBM公司直到80年代在它的机器上还配备PL/1。1967年为普及程序语言教育,美国达特茅斯学院的J. G. KEMENY和T.E.KURTZ研制出交互式、解释型语言BASIC(初学者通用符号指令码的字头)。由于解释程序小(仅8K)赶上70年代微机大普及,BASIC取得众所周知的成就。但是它的弱类型、全程量数据、无模块决定了它只能编制小程序。它是程序员入门的启蒙语言。1967年美国MIT的S.PAPERT教授开发了小型语言LOGO语言。其目的是无数学基础的青少年也能学习使用计算机,理解程序设计思想,自己编制过程或程序。但直到年代初微机普及到家庭它才受到重视。LOGO是交互式语言,用户编程就在终端前定义过程命令,并利用系统提供的命令构成程序。LOGO的数据是数、字、表。,由于它能方便地处理符号表,可以利用人工智能成果开发情报检索、演绎推理、自然语言会话小程序。青少年可设计各种智能游戏。递归程序的表达能力使青少年可受到结构化程序良好训练。1979年MIT LOGO小组推出APPLE LOGO,及TI LOGO(德州仪器公司TI 99/4A机)。这两个版本最为普及。LOGO是青少年入门的启蒙语言。LOGO的近于自然语言的命令及海龟、键盘、程序、图形并用的使用风格,对以后的命令式语言、用户界面语言有一定的影响。 1967年挪威计算机科学家O.J.DAHL等人研制出通用模拟语言SIMULA 67。它以ALGOL 60为基础,为分层模拟离散事件提出了类(CLASS)的概念。类将数据和其上的操作集为一体,定义出类似类型的板。实例进入运算。这是抽象数据类型及对象的先声。 60年代软件发展史上出了所谓的“软件危机”,是由于1962年美国金星探测卫星水手二号发射失败引起的。经多方测试在水手一号发射不出错的程序在水手二号出了问题。软件无法通过测试证明它是正确的。于是,许多计算机科学家转入对程序正确性证明的研究。 这时,著名的荷兰科学家E.DIJKSTRS 提出的“GOTO 语句是有害的”著名论断引起了一场在争论。从程序结构角度而言,滥用GOTO语句会使程序无法分析、难于测试、不易修改。 这里也提出了全程变量带来的数据耦合效应、函数调用的副作用、类型隐含声明和自动转换所带来的难于控制的潜伏不安全因素等等过程语言中的一些致使性弱点。60年代对大型系统软件的需求大为增长(如编制较完善操作系统、大型军用系统),要求使用高级语言以解决生产率之需,加上高级语言使用以来积累的经验,加深了众对软件本质、程序语言的理解。人们积极研制反映新理论的语言 1964年ALGOL工作组成员N.WIRTH改进了ALGOL 60提出ALGOL W近于结构化的语言。由于它结构简洁、完美、又结构化。ALGOL W 成为软件教程中示例语言。他带着ALGOL W 参加新一代ALTOL的研究委员会,即开发ALGOL 68的工作组。 ALGOL 68追求的目标也是能在多个领域使用的大型通用语言。1965年以WIJNGA ARDEN为首的一批科学家开始研究新ALGOL。强调了语言设计中冗余性(少作隐含约定)、抽象性(数据抽象与控制抽象)、正交性(一个语言机制只在一处定义并与其它机制无关)。强化了类型定义和显式转换;有并发、异常处理功能;保留GOTO允许有限制的函数边界效应;过程可以作为参数传递;用户可定义较复杂数据结构、定义运算符。语法定义是半英语半形式的。语言作成可扩充式,也就是说,有一个相对完备的语言核心,不断定义功能过程而扩大语言描述能力。表达式采用有利于编译效率的逆波兰表示法。 ALGOL 68集了当时语言和软件技术之大成。但因学究气太重,一般程序员难于掌握。强调语言简单的人持有不同看法。但文本草案在WIJNGA ARDEN坚持下通过了。为此,DIJKSTRA等人发表了“少数人声明“。N.WORTH带着竞争失败的ALGOL W 回去研究,发表了著称于世的PASCAL。 1971年PASCAL正式问世。PASCAL 的研制者一开始就本着“简单、有效、可靠”的原则设计语言。它只限于顺序程序设计。是结构化程序设计教育示范语言。PASCAL有完全结构化的控制结构。为了方便,除三种最基本的控制结构(顺序、if-then-else、while-do)外,又扩充了二种(do-until、for-do)。程序模块有子程序(过程和函数)、分程序,可任意嵌套,因而有全程量、局部量、作用域与可见性概念。保留GOTO语句但不推荐使用。PASCAL的数据类型大大丰富了,有整、实、字符、布尔等纯量类型;有数组、记录、变体记录、串等结构类型;增加了集合、枚举、指针类型。为用户描述复杂的数据结构乃至动态数据提供了方便。所有进入程序的数据都要显示声明、显示类型转换。加强了编译时刻类型检查。函数的显示的值参和变量参数定义便于限制边界效应。 在人们为摆脱软件危机而对结构化程序设计寄予极大希望的时候,PASCAL得到很快的普及。它也是对以后程序语言有较大影响的里程碑式的语言。570年代完善的软件工程工具硬件继续降价、功能、可靠性反而进一步提高。人们对软件的要求,无论是规模、功能、不是开发效率都在为提高了。仅管 PASCAL得到普遍好评,但它只能描述顺序的小程序,功能太弱。在大型、并发、实时程序设计中无能为力。程序越大越要求高的抽象力、安全性、积少成多的模块拼合功能。为了对付日益加剧的新意义上的软件危机。70年代过程语言继续发展,在总结PL/1和ALGOL 68失败的基础上,研制大型功能齐全的语言又一次掀起高潮。 70年代是微机大发展的时代。设计精巧的小型过程语言藉微机普及得到发展。软件市场FORTRAN、COBOL、汇编的三分天下开始缓避退却。 结构化FORTRAN、COBOL力图在新的竞争中保全自己的地位,专用语言丛生。一旦证实它的普遍性,它就变为通用语言。 C就是在这种情况下成长起来的优秀语言。 硬件的完善使得过去难以实施的组合爆炸算法得以缓解。人工智能的专家系统进入实用。LISP发展为INTEL LISP 和 MAC LISP两大分支,其他智能语言陆续推出。特别是BACKUS在1978年发表“程序设计能从冯诺依曼风格中解放出来吗?”一文发表后,非过程式语言、高抽象模式语言大量涌现。PROLOG取得巨大成功。 70年代继承60年代形式语言语法研究,形式语义取得重大成果。最先是IBM维也纳实验室集合欧洲著名的计算机科学家于1972年写出PL/1的操作语义。该语义用维也纳定义语言VDL表达,长达1500页,终因抽象层次太低,而此时(1971年)牛津大学D.SCOTT和C.STRACHEY提出了更加数学化的指称语义学转而研究PL/1的指称语义描述。1973-1978年D.BJORNER和C.JONES开发了维也纳开发方法VDM。所用语言是METALV。虽然巨大投资(3.5亿)未见可见效益使IBM终止了维也纳实验室的语义学研究。 但VDM方法及指称语言学对计算机语言发展影响是深远的。1973年C.HOARE和WIRTH用指称语义写PASCAL的语义发现了PASCAL设计上的许多问题竞未做下去。VDM以后还用于多种语言如CHILL,ADA,指导编译器的开发。1971-72年,DEC公司和卡内基.梅隆大学的WULF合作,开发了PDP(VAX)上的系统程序设计BLISS。它是无类型的结构化语言,没有GOTO语句。有异常处理和汇编接口。面向表达式。直到现在DEC公司还用它作系统设计。1972年,AT&T公司贝尔试验室RITCHIE开发了C语言。C语言的原型是1969年RICHARD开发的系统程序设计语BCPL。K.THOMPSON将BCPL改选成B语言,用于重写UNIX多用户操作系统。在PDP-11机的UNIX第五版时用的是将B改选后的C。C扩充了类型(B是无类型的)。1973年UNIX第五版权所90%左右的源程序是用C写的。它使UNIX成为世界上第一个易于移植的操作系统。UNIX以后发展成为良好的程序设计环境,反过来又促进了C的普及。C语言是小语言,追求程序简洁,编译运行效率高。是一个表达能力很强的顺序程序设计语言。它给程序员较大的自由度,下层数据转换灵活。程序正确必完全由程序员负责。上层是结构化的控制结构,有类似PASCAL的数据类型。糨的分别编译机制使糨可构成大程序。输入/输出依赖于UNIX,使语言简短。语言学家极力反对的GOTO语句、无控制指针、函数边界效应、类型灵活转换、全程量这些不安全的根源C全部具备。在某种意义下C得益于灵活的指针、函数副作用和数据类型灵活的解释。易读性又不好,偏偏程序员都喜爱它。因为它有大量环境工具支持。C程序写起来又短,调试起来又快。微机上的各种移植版的C语言,对C成为通用的程序设计语言起到了推波助澜的作用。C语言正以席卷系统程序设计领域的势头发展,并向应用域扩展,很值得研究。1972年法国MARSEILLE大学的P.ROUSSELL研制出非过程的PROLOG语言。PROLOG有着完全崭新的程序设计风格,它只需要程序员声明“事实”“规则”。事实规则都以一阶谓词的形式表示。PROLOG规则的执行是靠该系统内部的推理机,而推理机按一定的次序执行。在这个意义上它又有点过程序性。以回溯查找匹配。PROLOG的数据结构类似PASCAL的记录或LISP的表。它是以子句为基础的小语言,最初被解释执行,编译PROLOG是很久以后的事,由于PROLOG是逻辑推理模型的语言,它可以直接映射客观世界事物间逻辑关系。在人工智能研究中得到应用,80年代日本声称研制的五代机以PROLOG作为主导语言并研制PROLOG机。70年代,在传统语言中出现了以下有代表性的语言: 为了开发大型可维护程序,施乐公司1972-74年由GESCHKE领导研制了MESA语言。MESA是强类型结构化语言,有模块(若干子程序集合)概念;有抽象数据类型。支持并发程序设计,由监控器协调各模块执行。有分别编译,异常处理机制。保留GOTO语句,也可以抑制类型检查。由MESA配置语言编译的各模块。1974年MIT的LISKOV和ZILLES提出CLU语言,它突出的是数据抽象。数据抽象是70年代程序设计语言技术的重要成果,它允许用户定义抽象的数据类型。这些类型的定义和它的实现可显示地分开。定义描述了语义,实现对于使用该数据的用户是无关重要的,因而,利于修改。增强模块性和独立性。从而利于保证程序正确。数据抽象可定义 更远离机器概念迫于人类的数据概念。如堆栈就可定义为抽象数据类型。人们可通过压入数据、弹出数据的操作对栈体进行操作。其外在行为就是后进先出的数据栈,而栈体可由数组、或链表、或记录任一种数据结构实现。CLU的抽象数据类型称之一簇(CLUSTER)。由构造算子(CONSTRUCTOR)按簇的 板建立运算对象(实例)。CLU无GOTO,无全程量概念。用户可定义新的迭代(通过迭代算子ITERATOR) 数据抽象在1975年卡内基.梅隆大学WULF和SHAW开发的ALPHARD语言中是数据模块FORM。ALPHARD的特点是支持程序的验证。程序设计和验证同时进行。 另一个支持程序验证的语言是加州大学POPEK和加拿大的 HORNING于1976-77年开发的EUCLID。为了易于验证,无GOTO语句,指针仅限于集合类型,类型兼容有严格的定义。函数调用绝无边界效应。编译自动生成验证用的断言。EUCLID以后发展成数据流语言。 在并发程序方面,1975年丹麦学者B.HANSON开发了并发PASCAL。它没有追求大而全,只是将PASCAL向并发方面作了扩充,希望用PASCAL写操作系统。有抽象数据类型的类(CLASS)机制。控制方面提出进程类和管程类的概念。通过INIT语句激活类实例,CYCLE语句使进程无限循环地运行。通过管程(管理资源的模块)实现进程通讯。有较强的静态类型检查,可查出静态“死锁”。 令人不解的是正当人们对进程、管程概念充分评价时,B.HANSON本人放弃了这些概念,1981年发表了小型系统程序设计语言EDISON,仅用并发语句控制并发进程的执行。HANSON极力推崇语言的简单性,所以EDISON比并发PASCAL小得多,普通(不大的)微机都可以运行。但其表达能力比C差多了。没有达到并发PASCAL那么的影响。PASCA在结构化程序设计方面是一个示范性语言,在推行结构化程序设计教学上发挥了卓越的作用,但在工程实践上暴露出设计上的许多缺点。PASCAL无模块和分别编译机制不能编大程序。它的强类型是有漏洞的,类型等价似乎是按名等价,但有的实现按结构等价。最后的结论它是“伪强类型”。数组定长对处理字符串很不方便。布尔表达式求值定义不严。I/O规定太死,难于改写出灵活的输入/输出。声明顺序过严,无静态变量概念(局部量一旦所在局部块执行完毕就消失)。这都给程序设计带来不便。从小而灵活方面,它又不及C。没有位(BIT)级操作。指针操作限制过死。于是PASCAL的设计者1975年又开始开发MODULA语言,1977改进为MODULA-2。MODULA-2除了改进PASCAL的上述弱点而外,最重要的是有模块结构。可分别编译的模块是用户程序的资源。系统资源也以模块形式出现。模块封装了数据和操作(过程),模块定义和模块实现显示分开。程序员在定义模块中通过移入、移出子名控制程序资源(类型、变量、过程、子模块)的使用。MODULA-2增加了同步进程机制以支持并发程序设计,有有限的低级设施直接和系统打交道。取消GOTO语句、增加CASE语句中OTHERWISE机制,封装的模块可作抽象数据类型设计。它是用于系统设计的强类型语言。西欧的计算机科学家对MODULA-2是欢迎的,但它不巧与美国开发的ADA非常近似,与ADA竞争处于非常不利的地位。尽管它的9000句编译器具有ADA 20万句编译器80%的功能,也没有取得PASCAL那样的成就。70年代年代中期美国软件的最大用户美国国防部(美国软件市场约2/3经费直接或间接与它相关)深感软件费用激增并开始研究原因。研究结果表明:在硬件成本降低和可靠性提高的同时,软件费用不仅相对数,绝对数也在增加。美国国防部大量大型、实时、嵌入式系统软件开发方法落后、可靠性差。语言众多(常用种同加上派生方言多达成谅解5000种)造成不可移植、难于维护。为摆脱这种新的软件危机,其下定决心搞统一的军用通用语言。从1975年成立高级语言工作组开始投资五亿美元,前后八年研制出Ada程序设计语言。Ada是在国际范围内投票设计的,法国的一家软件公司中标,J.ICHBIAN成为ADA发明人。多达1500名第一流软件专家参与了开发或评审。它反映了70年代末软件技术、软件工程水平。为了提高软件生产率和改善软件可移植性,提出开发语言的同时开发支持该语言的可移植环境(APSE)。 ADA是强类型结构化语言。封装的程序包是程序资源构件。用户只能版程序包规格说明中显示定义的数据(包括抽象数据类型)和操作。数据结构和操作过程或函数)的实现在程序包中完成。封装支持模块性和可维护性。规格说明和体的分离支持早期开发(可延迟决策)。分别编译可组成复杂的大型软件。ADA有并发、异常机制。可定义精确的数据(如浮点数小数点后任意多的位数)。有将数据对象、类型、过程参数化的类属机制。有为目标机写目标程序(机器语言的或汇编语言地)的低级设施,可对字节、字位操作。 ADA的私有类型支持数据隐藏,程序包可实现数据抽象。明确的标识和运算符重载概念,既方便程序员又使程序好读且安全。强调可读性胜于可写性,ADA程序自成清晰的文档。ADA语言的开发过程完全按软件工程方式进行。严格禁止方言。美国国防部有一个严格管理ADA及其环境的机构AJPO(ADA联合规划办公室)负责ADA的确认、修改、维护、培训。由于ADA过多强调安全性和易读性,ADA编译程序要做较多的静态检查,因而体积庞大(约20万句、512KB的微机装下了微机ADA编译就剩不下工作空间了)。程序代码较长,虽不像COBOL繁琐但要比C语言程序长60%。运行效率,特别是嵌入式实时控制应用中,通过交叉编译得到的目标机代码一时还难满足要求。环境工具发展缓慢,因为除军方外民间公司更薄开发对所有语言通用的计算机辅助软件工程环境(CASE)。自80年第一个语言版本,83年修改定型至今,前后10年,ADA没有达到投资者预想的成就。已看到ADA反映的80年代初期的软件工程技术,随着软件工程本身向集成化、可重用、面向对象方向发展,ADA已有一些不适应了。但美国军方还在合力支持,因而ADA还有一段发展时期。 70年代末到80年代初值得一提的还有FORTH语言。FORTH是典型的中级语言。它是汇编语言指令码向用户自定义方向的发展,也就是说,用户可以面向一个堆栈机器模型定义操作命令字(WORD)。最低层的字是指令码,逐层向上,上层字由下层组成。因此,FORTH系统有良好的继承性。系统提供核心字、解释器字、编译字和设备字。对于简单的计算解释器字直接执行命令(字),复杂计算可将字定义编译成目标码存入堆栈供以后执行。有汇编字集合以便用户直接使用机器,要求字集合操作数值计算,引用字集合使用户可以引用系统和用以前已定义的字。FORTH程序员首先看系统中字的字典,以它们组合成新字,进而构成程序。FORTH程序的逆波兰表示法便利于解释编译,这对长期从事汇编编程的程序员并不生疏。FORTH把具体的机器抽象为堆栈机,既可以使用程序员直接操纵机器又不涉及具体机器指令码、操作码、存储安排。而且良好的继承性使程序越编越短,在最终用户层一两个命令就完成了程序设计。它大受控制领域、要求单片、单板计算机(例如仪表工业)领域的程序员喜爱。FORTH是C.MOORE一个人开发的语言,他于1968年在IBM 1130机器上实现第一个FORTH。他说他的语言是第四代的(FOURTH-GENERATION)。由于1130只允许五个字符的名字才叫做FORTH。1973年成立FORTH公司并把它投入航天工程应用并发展了通用商务FORTH系统。此后世界各地开始FORTH。1976年成立欧洲FORTH用户小组(EFUG),1978年成立FORTH标准化国际组织,80年发布FORTH-79标准文本。与此同时美国FORTH爱好者小组(FIG)也制定了标准 FIG-FORTH。各国天文行业,仪表行业纷纷以其为行业用计算机语言。如今,各种微机上均配有FORTH软件。FORTH并不好读,也不宜编大程序。查在它自己的领域简单好用、扩充方便、编译迅速。与传统语言追求的目标大相径庭。给人耳目一新。6.80年代面向对象对象发展 Ada大、功能齐全、开发 资可以说是程序设计语言之最。但它还没有普及就有些落伍了。可能今后不会有人再投入巨资去开发大型过程语言。80年代继续向软件危机开战,但软件工程以陈旧技术难于作出庞杂的软件工具。为了改善这种情况,人们乞灵于面向对象技术。 程序设计语言纷纷向面向对象靠拢。正如上一个10年程序设计语言结构化一 。这是 主要特点是。80年代的第二个特点是“用户友好”的所谓第四代语言的出现。80年代 的第三个特点是各种技术相互渗透各种更高级非过程性语言出现。 1972年美国施乐公司保罗奥特研究中心的A.KAY领导的软件概念小组为方便不同用户处理各种信息在小机器上搞了一个 DYNABOOK计划。它以全新的“对象”概念建立自己的系统。 SMALLTALK语言是该系统的软件。专用的硬件机、SMALLTALK环境、用户界面、面向对象程序设计风格构成了整个系统。 “对象”是有自己的数据和操作的实体,各对象相对封闭。程序设计就是建立应用系统中的对象群,并使之相互必消息。接到消息的对象就在自己封闭的存储中响应执行操作。操作的结果是改变这组对象的状态、完成计算(发出输出消息,对象响应后完成输出)。 为了使各自封闭的对象数据和操作不致多次重复定义。SMALLTALK有类和继承的概念。类如同传统语言中的类型,只有类的实例进入实际运算(叫实例对象)。类对象中的数据和操作可为它的子类继承,它自己的数据和操作也继承自超类。于是一个SMALLTALK系统就对应一个类库。它象一棵大树,所有的行之有效的类都在这棵大树的某个位置上。用户只要选取其中某些类稍加修改变成自己问题所需要的类(子类),定出通讯协议,让它们的实例相互通讯完成计算。无论是系统对象和用户定义的对象都按不同的抽象层次放在统一的类库中。例如,向编译对象发消息度传送用户对象,该用户对象(程序)就被编译了。 SMALLTALK只有抽象层次的对象,面向对象程序设计的概念因此而出。 SMALLTALK经72、74、76、80四次修改80年代 上舞台。因为它天然的封装性体现了模块性和数据隐藏,利于维护修改。它的继承性适于编制可重用的软件。这对困惑于大程序难于管理的软件工程学无疑是一条绝好出路。 SMALLTALK类对象概念来自SIMULA 67,响应消息的方法表达式求值类似LISP的归纳。它本身是在小机器上开发的小系统。庞大的类库去了很大的空间。难于编制大型程序。加上它独特的编程风格,SMALLTALK本身并未发展起来。但面向对象思想,语言和环境一致性;交互式和极端用户友好(用菜单和 标即可上机),对80年代语言和计算系统产生了巨大影响。 各种过程语言,甚至汇编语言都借鉴对象思想,以求能支持面向对象程序设计。82-86年相继出现OBJECT PASCAL、OBJECTIVE-C、OBJECT ASSEMBLER(68000汇编程序改造)、OBJECT-LOGO、OBJECT FORTH它们以原有语言采纳对象-消息编程模式。 另一些语言向类、对象延伸。以对象引用编程模式编程。如85年AT&T公司推出的C+。87年BORLAND公司的TURBO PASCAL 5.5。还有一些较新的语言,由于有抽象数据类型机制也可以支持面向对象程序设计,但不是面向对象语言。如:ADA、MODALA、ALPHARD、CALL。传统的人工智能语言也向面向对象上发展。施乐公司1983年在INTEL LISP基础上研制了LOOPS。是面向对象LISP美国西海岸版本。FLAVOS有更为灵活和复杂的多继承性。85年施乐公司又作出COMMON LOOPS。1988年,ANSI X3J13组将它们统一为CLOS。85年,IBM日本分公司开发了SPOOL是PROLOG向面向对象的扩充。86年VALCAN和施乐联合开发的的并发PASCAL处理程序也是支持面向对象的。70年在软件发展史上是数据库成熟的年代。数据库有数据描述语言DDL、数据操作语言DML。它们教师为实现某种模式数据库的专用语言。目标简单,在所应用的领域高效。因此,不能以通用程序设计语言代替。数据库给用户以界面(即查询)语言。对于简单程序没有必要转到通用语言再编程序。查询语言进一步扩充,就形成一系列查询命令加上约束条件控制的非过程语言。如DBASE、SQL。80年代软件环境大发展。操作系统原有的作业控制语言(JCL)和系统调用命令也逐步发展为该环境的统一的界面语言。如UNIX的SHELL 。80年代系统软件中开发环境的思想向专业渗透。各专业都为本专业的最终用户提供简便的开发环境。即事先将程序模块以目标码存放计算机,用户只需简单的命令,甚至本专业常用的图形就可组成应用程序。这些图形、菜单、命令即用户界面语言。这些语言共同的特点是声明性(只需指明要做的事)、非过程性、简单、用户友好,而应用程序的实现可由系统自己完成(低层有固定不变的计算模型,如关系运算,也可以连接备用模块智能推理)。这就所谓的第四代语言(4GL)。4GL并没有为程序设计语言学带来什么新概念和新特征。一般用传统技术做出界面语言解释器。要求环境有较好的工具支持(应用程序、程序库、各种测试、调试、文档工具)。最简单的4GL是图形菜单,用户不用击键即可完成计算(用 标器)。4GL是硬件高速发展和快速降价必然的结果。因为不可能在短期内培训出与硬件发展需要相匹配的那么多的程序员。但4GL不易编制开创性程序。790年代年代语言发展趋向 90年代计算机硬件发展速度依然不减。每片芯片上晶体管数目仍然是两年增加一倍。计算机主频从现在的12-25 赫可增加250 赫(每秒钟可执750MIPS指令),价格进一步低廉。使用方式也从多人一机的分时系统到一人一机,一人多机。软件需求进一步扩张。可以心计。 建立在异质网上的多媒体多媒体将成为使用环境的主流。因而支持分布式、并行的程序设计语言会有圈套发展。而且由于分布式本身的复杂性(基于数据共享的同步通信、基于消息传递的通信、基于远程过程调用的通信),在80年代研究的基础上会有多种并发语言,而且在老语言上改造的居多,如并发 PASCAL、CONCURRENT C、CONC、ADA-9X等。首先是系统程序设计语言。 支持多媒体用户界面的多媒体程序设计语言(也和第5代语言)在90年代末期也许能建立初步标准。尽管在最终用户层上以图标、图符编程80年代已经出现,但其支持系统各不相同,经过一 时间模索出标准图素、音素这中系统才能成为通用的“语言”。是90年代最热的重点。 由于有良好环境支持,程序设计重点从算法加数据库实现技术向规格说明描述方面转移。规格说明语言在80年代已有研究。 (META-、EPROL、HOPE CLEAR、SPECINT、Z)在个别具体领域也能实用,但作为通用,哪怕是某个行业建立在域分析基础上的规格说明语言尚未出现。90年代可望突破。 环境智能化、规格说明语言自动生成目标码客观上要求加入人工智能技术。异质网环境抢先后各结点上数据库资源共享都要求各语言间不要有人为的断层。因此,多范型语言研究会有较大发展。80年代向面向对象扩充已经出现多范型语言,如 C+,ADA-9x(命令式加对象式)、CLOS(函数式加对象式)。此外小型研究有TA BLOG(关系式加逻辑式)、FUNLOG(函数式加逻辑式)值得注意的是加拿大的NIAL(1983-1988)和美国的G(1986-)语言,它们试图将五种范型:命令式+对象式+逻辑式+关系式统一在一个语言之中。虽然问题重重,但可由此发现许多新概念和新特征,对于程序设计语言研究是非常有利的。 随着面向对象数据库和面向对象操作系统的成熟,完全消灭语义断层的数据库程序设计语言(DBPL)和持久性程序设计语言(PPL)终将汇合并标准化。这 ,程序运行时大量文件到内存转换则可以取消,从而增大了计算机的实时性,甚至取消文件概念。 4GL会有交大发展,种类花色增多,行业标准出现。支持它们的通用程序设计语言是(C)、C+、ADA。程序设计语言的分类 可以从不同的角度对程序设计语言分类。而且一个语言可以分在几个类别中。目前尚无分类标准,但大致清楚其所属类别,有利于我们选择使用语言。也可以澄清一些术语概念。 按对机器依赖程度1. 低级语言 面向机器,用机器直接提供的地址码、操作码语义概念编程。机器语言和汇编语言,宏汇编虽然抽象层次逐渐提高仍属低级语言的汇编语言(如8088汇编,6800汇编)。2. 高级语言 独立于机器,用用语言提供的语义概念和支持的范型编程。如命令式(PASCAL、C、ADA)、函数式(LISP、M)、逻辑式(PROLOG)、关系式(DBASE)、对象式(SMALKTALK、C+)。3. 中级语言 可以编程操纵机器的硬件特征但不涉及地址码和操作码。如字位运算,取地址,设中断,开辟空间、无用单元发回,用寄存器加速等。高级汇编,C,FORTH属此例。按应用领域1. 商用语言 处理日常商业事务。有良好文字、报表功能,数据量大和数据库密切相关。代表语言是COBOL,RPG,ADA。2. 科学计算 数值计算量大,支持高精度、向量、矩阵运算。代表语言有FORTRAN、APL、ADA。3. 系统程序设计 支持与硬件相关的低级操作,编写系统程序(操作系统,编译、解释器,数据库管理系统,网络接口程序)的语言,如C、ADA、BLISS、FOTH。4. 模拟语言 模拟应用主要是以时间为进程模拟客观世界的状态变化。分离事件模拟和连续模拟。 代表语言有GPSS、SLAM、SIMULA 67。5. 正文处理 主要操作对象是自然语言中字符(英文),很方便产生报告、表格,代表语言是SMOBOL。6. 实时处理 其特点是能根据外部信号控制不同的程序 并发执行。这 语言有并发PASCAL 、并发 C、ADA、MESA、OCCAM、FORTHRAN-90、LINDA。用于通讯领域的程序设计语言都要有实时功能,如GYPSY,CHILL。7. 嵌入式应用 在一个大型机器(宿主机)上为小机器(或单片机)开发程序,经调试后将它译为小机器(目标机)的目标码在小机器上运行叫嵌入式应用。如机载、弹载计算机。这类程序一般都有实时要求,并近于系统设计。代表语言ADA。8. 人工智能应用 这类程序是对人们的智力行为仿真。包括自然语言理解、定理证明、模式识别、机器人、各种专家系统。这类语言要能描述知识、并根据推理推断合理的结论。在符号运算上作谓词演算或演算是其推理运算的基本方式。代表语言有LISP和PROLOG。9. 查询和命令语言 这是一类新兴的语言,是各种早期系统程序简单的用户命令的发展。数据库语言DBASE、SQL。操作系统UNIX的SHELL语言为其代表。现代软件环境的用户界面语言更是丰富多彩使用方便。其特点是与程序员的交互性和非过程性。10. 教学语言 为了培训程序员或使学生很快入门,人们设计了教学用语言。例如,过程程序设计有BASIC,结构化程序设计有PASCAL,青少年启蒙有LOGO。但往往由于对程序语言的作用没有全面理解,初学者到一门启蒙语言后就企图用它作软件设计,这是十分有害的。11. 打印专用 图文并用在各种打印机(包括激光)打印字体优美的报告、图形、图象。代表语言有POSTSCRIPT、TEX、LATEX。12. 专用于某类数据结构。串处理 专用于处理正文字符串,抽取字符串,引用串函数,串形式匹配,回溯与穷举查找。代表语言有SNOBOL、ICON。数组处理 构造和操纵矩阵,可整体操纵数组,代表语言有APL、VISI CALE,LOTUS。表处理 支持表的各种切割、连接操作。直接表I/O、动态堆栈分配。代表语言有LISP,T、SCHEME、MIRANDS。13. 数据库应用 数据库专用,可完成简单应用,复杂应用要嵌入通用程序设计语言,如SQL、。数据库程序设计语言 既支持一般应用操纵临时对象(程序终止即消失),也可操纵数据库中持久对象,且可混合在一个程序中,如C+、C0、OPAL。 按实现计算方式编译型语言 用户将源程序一次写好,提交编译,运行编译得目标码模块。再通过连接编辑、加载成为内存中可执行目标码程序。再次运行目标码,读入数据得出计算结果。大多数高级程序设计语言属于这一类。解释型语言 系统的解释程序对源程序直接加工。一边 ,一边执行。不形成再次调用它执行的目标码文件。大多数交互式()语言、查询命令语言采用解释型实现。典型的例子有BASIC,LISP,PROLOG,APL,SHELL,SQL。它们的特点是所用 空间小,反映快,但运行效率慢。按使用方式 交互式语言 程序在执行过程中程序可陆续添加和修改,以对话方式实现计算。一般是解释型的。由于程序设计支持环境的发展,交互式语言可方便为用户调用各环境工具,有日益发展的趋势。 非交互式语言 多数编译型语言的目标码文件执行期间,程序员不能干预,只能在执行完毕再修改。按程序设计范型 单范型语言 范型即程序组织和实现计算的模式命令式语言 计算实现的模型如果按冯诺依曼原理强制改变内存中的值叫命令(或译指令、强制IMPERATIVE)程序状态的变化没有一定规则,程序逻辑大了就很难查错,很难调试,不易证明其正确。组织程序和范型即:算法过程+数据结构。到目前软件开发主导语言仍是命令式语言。近代命令式语言增加了模块强制类型检查、抽象数据类型、类属等机制可开发较安全、可靠的大程序。面向对象语言 将数据和其上的操作封装于对象中,对象归属于类对象,类对象有继承,实例对象上的操作可动态决定。程序是相互发消息通信的对象集合。代表语言有SIMULA-67、SMALLTALK。数据流语言 传统过程语言中以程序控制保证程序功能实现,数据是分散的,为控制流服务。数据流语言以数据对象为核心加工过程为其服务。藉以提高运算速度。这种语言的程序设计方法学模型是基于数据流。数据流语言有VAL和EUC LID。函数式语言 程序对象是函数及高阶函数,组织程序的范型是函数定义及引用。代表语言有LISP FP ML MIRANDA。逻辑式语言 程序对象是常量,变量和谓词、组织程序的范型是定义谓词的公式,并构造满足谓词的事实库和约束关系库。代表语言有。函数式和逻辑式语言不需强制求值故称施用式语言(),又因无需涉及求值过程,只定义“求什么?有什么(函数)关系”故也叫声明式(DECLARATIVE)语言。 多范型语言一个程序设计语言不止支持一种程序设计范型,最初为将一个常用的语言扩充具有另一范型的能力,有目的研究五种范型号组合是NAIL(1983)和G(1986) 。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论