还剩12页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
第章历史的回顾与程序设计语言分类1程序设计语言发展迅速到目前还丝毫没有规范到统一语言的迹象,我们要研究它,最好办法是从它的历史发展开始,展开它的全貌从发展中了解为什么老的不行要有新的,这其中的困难和技术正是我们研究的内容分类使我们简化问题只研究一类中的一个、两个代表就可以程序设计语言简史
1.1年第一台现代计算机问世,它用真空管做计算,一下子比当时最快的电动机1945ENIAC械计算机快倍(每秒次乘法)存储器非常小,计算指令(即程序)由外部插座和开关300300馈入还不能称之为完全自动计算冯•诺依曼在一篇论文中建议()计算机应采用二19461进制()计算机的指令和数据都可以放在存储器内这就是奠定现代计算机的著名的冯•诺2依曼原理逐条从存储器中取出指令执行,按指令取出存储的数据经运算后送回CPU数据和指令(存储地址码、操作码渚统一按二进制编码输入数据值的改变是重新赋值,B即强行改变数据存储槽的内容,所以说它是命令式的()imperative第一台按冯•诺依曼原理制成的通用电动计算机是年美国兰德公司的人们1951UNIVAC-lo就开始了机器语言的程序设计指定数据区编制一条条指令由于任何人也无法记住并自如地编排二进制码(只有和的数字串),则用、进制数写程序,输入后是二进制的程序10816的外部表示和内部的存在一开始就是分离的单调的数字极易出错,人们不堪其苦,想出了将操作码改作助记的字符,这就是汇编语言,汇编语言使编程方便得多但汇编码编的程序必须要通过汇编程序翻译为机器码才能运行尽管汇编码程序和机器码程序基本一一对应,但汇编语言出现说明两件事,一是开始了源代码一一自动翻译器一一目标代码的使用方式,一是计算机语言开始向宜人方向的进程年代高级语言出现
1.
1.150年根据年提出的用编译程序实现高级语言的思想,研究出第1954Backus1951Rutishauser一个脱离机器的高级语言其编译程序用个人一年完成(用汇编语言写)到FORTRANI18年的它就比较完善了它有变量、表达式、赋值、调用、输入/输出等概念;1957FORTRAN II,有条件比较、顺序、选择、循环控制概念;有满足科技计算的整、实数、复数和数组,以及为保证运算精度的双精度等数据类型表达式采用代数模型的出现使当时科技计算为主的软件生产提高了一个数量级,奠定了高级语言的FORTRAN地位也成为计算机语言界的英语式世界语FORTRAN年欧洲计算机科学家的一个组织和美国计算机协会的专家在苏黎士会1958GAMM ACM晤起草了一个“国际代数语言的报告,随后这个委员会研制了得到广泛支持和IAL”ALGOL58响应年欧美科学家再度在巴黎会晤对进行了补充,这就是众所周知的1960ALGOL58年罗马会议上对再次修订并发表了对“算法语言修订的ALGOL60o1962ALGOL60ALGOL60报告”由于该报告对定义采用相对严格的形式语法语言为广大计算机工ALGOL60ALGOL作者接受,特别在欧洲在美国,公司当时经营世界计算机总额的销售量,一心要推IBM75%行不支持以致始终没有大发展起来尽管如此,还FORTRAN,ALOGL,ALGOL60ALGOL60是在程序设计语言发展史上是一个重要的里程碑年为了开发在商用事务处理方面的程序设计语言,美国各厂商和机构组成一个委1959图主要通用程序设计语言的发展和相互关系
1.1程序设计语言的分类
1.2可以从不同的角度对程序设计语言分类而且一个语言可以分在几个类别中尽管目前尚无分类标准但大致清楚其所属类别,有利于我们选择使用语言也可以澄清一些术语概念按对机器依赖程度
1.
2.1低级语言面向机器,用机器直接提供的地址码、操作码语义概念编程机器语言和汇编1语言,宏汇编虽然抽象层次逐渐提高仍属低级语言的汇编语言如汇编,汇编808668000高级语言独立于机器,用语言提供的语义概念和支持的范型编程如命令式、2Pascal,C,Ada函数式、逻辑式、关系式、对象式LISP,ML PrologSQL Smalltalk,C++中级语言可以编程操纵机器的硬件特征但不涉及地址码和操作码如字位运算,取地址,3设中断,开辟空间、无用单元收回,用寄存器加速等高级汇编,属此列C,FORTH按应用领域
1.
2.2商用语言处理日常商业事务有良好文字、报表功能,数据量大和数据库密切相关代1表语言是COBOL,RPGo科学计算数值计算量大,支持高精度、向量、矩阵运算代表语言有2FORTRAN.APLo系统程序设计支持与硬件相关的低级操作,编写系统程序操作系统,编译、解释器,数3据库管理系统,网络接口程序的语言,如C,Ada,Bliss,FORTHo模拟语言模拟应用主要是以时间为进程模拟客观世界的状态变化分离散事件模拟和连4续模拟代表语言有、、GPSS SLAMSIMULA67o正文处理主要操作对象是自然语言中字符英文很方便产生报告、表格、代表语言是5SMOBOLo实时处理其特点是能根据外部信号控制不同的程序段并发执行这类语言有并发6PascaK并发、、、用于通讯领域的程序设计语言都要有实C AdaMesa OCCAM,FORTRAN-90,LINDAo时功能,如、Gypsy CHILLo嵌入式应用在一个大型机器宿主机上为小机器或单片机开发程序,经调试后将它译7为小机器目标机的目标码在小机器上运行叫嵌入应用如机载、弹载计算机这类程序一般都有实时要求,并近于系统设计代表语言Ada人工智能应用这类程序是对人们的智力行为仿真包括自然语言理解、定理证明、模式8识别、机器人、各种专家系统这类语言要能描述知识、并根据推理规则推断合理的结论在符号运算上作谓词演算或入演算是其推理运算的基本方式代表语言有和LISP Prolog查询和命令语言这是一类新兴的语言,是各种早期系统程序简单的用户命令的发展数9据库语言、操作系统的语言为其代表现代软件环境的用户界面语言dBASE SQL,UNIX Shell更是丰富多采使用方便其特点是与程序员的交互性和非过程性教学语言为了培养程序员或使学生很快入门,人们设计了教学用语言例如,过程程10序设计有结构化程序设计有青少年启蒙有但往往由于对程序语言的作用BASIC,Pascal,LOGO没有全面理解,初学者学到一门启蒙语言后就企图用它作软件设计,这是十分有害的打印专用图文并用在各种打印机包括激光打印字体优美的报告、图形、图象代表11语言有、Postscript TexLatex□专用于某类数据结构12串处理专用于处理正文字符串,抽取字符串,引用串函数,串形式匹配,回溯与a穷举查找代表语言有:、SNOBOL ICONo数组处理构造和操纵矩阵,可整体操纵数组代表语言有b APL,Visicale,Loutuso表处理支持表的各种切割、连接操作直接表、动态堆栈分配代表语言有:、c I/O LISP、T SchemeMirandao数据库应用13数据库专用,可完成简单应用,复杂应用要嵌入通用程序设计语言,如a SQL.FoxproDelphi PowerBuildero数据库程序设计语言既支持一般应用操纵临时对象程序终止即消失,也可操纵数据库b中持久对象,且可混合在一个程序中,如C++,C02,OPALo按实现计算方式
1.
2.3编译型语言用户将源程序一次写好,提交编译,运行编译得目标码模块再通1过连接编辑、加载成为内存中可执行目标码程序再次运行目标码,读入数据得出计算结果大多数高级程序设计语言属于这一类解释型语言系统的解释程序对源程序直接加工一边翻译,一边执行不形成2再次调用它执行的目标码文件大多数交互式语言、查询命令语言采用解释型实现interactive典型的例子有、、、、、它们的特点是所用翻译空间小,BASIC LISP Prolog APLShell SQLJava反应快,但运行效率慢按使用方式
1.
2.4交互式语言程序在执行过程中程序可陆续添加和修改,以对话方式实现计算一般是1解释型的由于程序设计支持环境的发展,交互式语言可方便为用户调用各环境工具,有日益发展的趋势非交互式语言多数编译型语言的目标码文件执行期间,程序员不能干预,只能2在执行完毕再修改按程序设计范型
1.
2.5单范型语言范型即程序组织和实现计算的模式1命令式语言计算实现的模型如果按冯•诺依曼原理强制改变内存中的值叫命令或译指令、a强制式的所有过程语言都基于这个原理由于强制改变值,程序状态的变化没有Imperative一定规则,程序大了就很难查错,很难调试,不易证明其正确组织程序的范型即算法过程+数据结构到目前软件开发主导语言仍是命令式语言近代命令式语言增加了模块强制类型检查、抽象数据类型、类属等机制可开发较安全、可靠的大程序面向对象语言将数据和其上的操作封装于对象中对象归属于类对象,类对象有继承,b实例对象上的操作可动态决定程序是相互发消息通信的对象集合代表语言有,Simula-67Smalltalk数据流语言传统过程语言中以程序控制保证程序功能实现,数据是分散的,为控制流c服务数据流语言以数据对象为核心加工过程为其服务藉以提高运算速度这种语言的程序设计方法学模型是基于数据流数据流语言有和Vai EUCLIDo函数式语言程序对象是函数及高阶函数,组织程序的范型是函数定义及引用代表语d言有、、、LISP FPML Mirandao逻辑式语言程序对象是常量,变量和谓词、组织程序的范型是定义谓词并写引用谓词e的公式,并构造满足谓词的事实库和约束关系库代表语言有Prolog函数式和逻辑式语言不需要强制求值故也称施用式语言又因无需涉及求值过Application,程,只定义“求什么?有什么函数关系”故也叫声明式语言declarative多范型语言2一个程序设计语言不止支持一种程序设计范型,最初为将一个常用的语言扩充具有另一范型的能力,老语言对象化就有很多实例,即它们是两范型的,有目的研究五种范型组合是§LL5和Nail1983G1986O并发程序设计应该说也是一种范型,因为它在组织程序时程序执行的非顺序性和各成分相互通信的时间要求和单主机上顺序程序是不同的但在各程序成分内的组织与设计与该种语言顺序部分没什么不同,即各种范型语言均向并发语言发展如Ada,Concurrent Smalltalk,Concurrent并发语言必然是顺序部分的超集Prologo按断代划分
1.
2.6由于硬件中从真空管到超大规模集成电路已经五代了程序设计语言的断代当然也要按自己的特征第一代语言年代11GL50主要特征是面向机器,离不开地址码,操作码,存储空间分配机器语言崛、汇编语言即是第二代语言年代22GL60主要特征是脱离机器面向算法过程的高级语言有变量、赋值、子程序、函数调用概念少量基本数据类型,有限的循环层次三层至多七层一般无递归调用、、FORTRAN BASIC即是ALGOL60COBOL第三代语言年代33GL70主要特征是结构化控制结构,块级控制有作用域和可见性概念有丰富的数据类型,除基本类型增加了布尔、集合、字符类型而外,用户可自行定义结构数据,枚举数据,枚举数据,还可通过指针定义动态数据第三代语言的典型代表是第三代晚期,出现了程序或模Pascal块定义和实现显式分离特征规格说明只定义程序的功能,体是规格说明Specification body的过程实现和就是典型例子Ada Modala-2第四代语言年代44GL80主要特征是极端用户友好最终用户只经过几天甚至几小时训练即可上机它是enduser声明式、交互式、非过程化语言依赖于环境支持,一般都要有大的数据库编制一个程序要比第三代语言所花时间少一个数量级但由于把许多编程工作放在支持系统中自动完成,往往只有某一方面的功能,所以到目前为止还没有通用的第四代语言如只适合表格处LOTUS123理适合数据库查询和应用、dBASE MANTISIOEAL NATURALAPPLICATION FACTORY声称凡程序都能编,但也仅限于数据处理COBOL第五代语言55GL习惯上把用于人工智能程序表达的语言称之为五代机语言或五代语言实际上早在LISP年就设计出来了它是对抽象的符号进行表处理而不是象和那样算出1957ALGOL FORTRAN数值,所以一开始就用于数学定理证明之类的智能程序年代出现的更是为智能推理70Prolog而设的,它们都是小语言,而早期都是解释执行的它们只用一种程序设计模型在人工智能方向试探它们的特点都是在上层按某种模式去开发程序,下层实现则千篇一律的笨办法(例如,用的是递归树查找的匹配方式)于是,有人研究机机,下层直接是推理单Prolog LISPProlog元而不必用冯•诺依曼机去模拟推理、找出匹配但在非它所长的智能应用中机、LISPProlog机笨拙无比所以五代机及其语言目前只能说有了萌芽真正五代机通用语言是什么,目前还很难预言还有一种说法是把除正文语言之外的其他媒体语言称为从断代是革命而不是改良的5GLo角度多媒体语言研究应该称做第五代但目前仅仅是把正文与其他媒体可等价的部分用其他媒体表达,从而简化程序设计(它还是基于正文的),如前所述,各媒体有其自身不可等价性(如声调、声音速度、强度带来的语义反意),怎样程序设计?目前尚不可知本章小结
1.3•本章按年代给出了程序设计语言发展的各阶段,程序设计语言研究最主要是高级程序设计语言它的出现,奠基研究、完善、向对象式发展,九十年代只给出六个可能的发展方向,并发式、多媒体()、完善、规格说明式、数据库程序设计语言、多范型式5GL4GL•可以按多种准则为程序设计语言分类一个语言可以在多个类别,本书按对机器依赖程序、应用领域、实现计算方式、使用方式、编程范型和断代划化,六个角度分类所指语言一般至少在某个领域是比较通用的特别专门的*语言不是本书研究范围•历史上有较大影响的语言是FORTRAN,COBOL,Algol-6o,PL/1,LISP,Algo1-68,BASIC,Pascal,APL,Simula,C,Ada,Smalltalk,Prolog,ML,C++,SQL,Java本章习题学习本教程序之前你会哪些语言,它们是哪个时代的产物,它的祖先,它的类别,它的
1.1特点,全部列出之考证一下是从什么通用语言演变而来的它的特点是什么,与祖先语言同异
1.2dBASE能不能编人工智能程序?为什么?
1.3BASIC答一般不能首先,人工智能应用,这类程序是对人们的智力行为仿真,包括自然语言理解、定理证明、模式识别、机器人、各种专家系统这类语言要能描述知识,并根据推理规则推断合理的结论在符号运算上作谓词演算或入演算是其推理运算的基本方式因此此语言最好是非过程的,以直接反映客观事物之间的关系是过程性语言、是交互性、解释型语言,BASIC这是由于它的全程量数据、无模块,决定了它只能编制小程序,它不能定义数据类型,没有递归,这对匹配回溯是致命的因此一般情况下,不能满足人工智能的要求但它有判断,转移和条件,可以在相对窄小范围内模拟实现专家系统程序所以不能绝对什么是嵌入式语言,它有哪些特点,有什么好处,有什么麻烦?
1.4就你知道的软件工程原则,评价语言作大型软件开发的优缺点
1.5C同评价语言作大型软件的优缺点
1.
61.5,Ada小结第三段列举的种语言,你用一两句话说明它在历史上重要性至少要说种
1.71810程序设计语言的成功有以下因素
1.8成功二设计好坏+实现难易+权势支持+社会需要试比较任选一组答FORTRAN-Algol-60;Modula-2-Ada;BASIC-Pascal;Pascal-C;PL/l-Algol-68Pascal-C的研究者一开始就本着“简单、有效、可靠”的原则设计,因此一问世,就取得了Pascal巨大的成功在人们为摆脱软件危机而对结构化程序设计寄于极大希望的时代,得Pascal到很快普及,以上说明设计好坏和社会需要使取得成功,但随着社会发展,硬件继Pascal续降价,功能和可靠性进一步提高,人们对软件的要求,无论是规模、功能、还是开发效率都大为提高因此只能编顺序小程序的已不能满足需求了,也就慢慢只在教学示Pascal范中使用是一个表达能力强、顺序的、结构化程序设计语言,它给程序员较大的自由度下层数C据转换灵活上层是结构化的控制结构,它的分别编译机制使它可以构成大程序输入/输出依赖使语言简短得益于灵活的指针,函数副作用和数据类型的灵活它设UNIX,C计上虽不完美,但它简洁、近于硬件、代码高效、并有大量环境工具支持,以及实现上的优势,使它成为系统软件的主导与FORTRAN ALGOL语言的出现使当时科技计算为主的软件生产提高了一个数量级,奠定了高级语FORTRAN言的地位,年的“算法语言的修订的报告”对的定义采用相对严格1960ALGOL ALGOL的形式语法语言为广大计算机工作者接受,当时公司当时经营世界计算机ALGOL IBM总额的销售量,一心要推行不支持以致始终没有大发展75%FORTRAN,ALGOL,ALGOL60起来以上说明了“权势支持”是影响程序设计语言成功的因素之一和语言Moduld_2Ada和在设计上是相似的,二者皆是强类型语言,封装的程序包是程序资源构件Moduld-2Ada从实现上来看,语言句编译器就具有了万句编译器的功能,明Mudula-29000Ada2080%显优于但是,有美国国防部的支持,故在与的竞争中处于不利地位,Ada Adamodula Ada最终也没有取得很大成就,不及语言的而在美国国防部的支持下,发展迅PASCAL Ada速该语言的开发完全按软件工程方式进行,但是过多强调安全性和易读性,因而编Ada译程序要做许多静态检查,故体积庞大且由于的环境工具发展缓慢,故自其第一个Ada版本以来,并未取得投资者预想成就并且,随着软件工程本身向集成化、可重用、面向对象方向发展,已有些不适应,然而美国军方仍然支持,故年,完成面向对象Ada95Ada的改造,但这种改造使其成为最庞大臃肿的语言,可是它却被和接受,成国世界ANSI ISO上第一个有法定标准的面向对象语言由此可见,程序设计语言的成功不仅在于其设计的好坏和实现的难易,权势支持和社会需要也是重要因素试述程序设计语言与程序设计语言
1.9Programming LanguagePLProgram Designlanguage有什么不同PDL探讨一下程序设计语言是否向人类自然语言靠近?有没有可能不用程序设计语言,用
1.10规范化自然语言上机?员会在美国国防部支持下于年月发表了数据处理的语言开发者的目标要I9604COBOL60尽可能英语化,使没有计算机知识的老板们也能看得懂所以像算术运算符+、*都用英文、ADD的控制结构比还要简单,但数据描述大大扩展了,除了表MULTIPLYo COBOL60FORTRAN(相当于数组)还有纪录、文件等概念虽然繁琐(即使一个空程序也要写个符COBOL60150号),由于其优异的输入/出功能,报表、分类归并的方便快速,使它存活并牢固占领商用事务软件市场,直到今天在英语国家的商业领域还有一定的地位年代计算机应用在科学计算和事务处理方面有了、因而应用得到迅50FORTRAN COBOL,速发展工程控制方面刚刚起步,仍是汇编语言的市场年,美国科学家1957MIT McCarthy提出并把它用于数学定理验证等较为智能性的程序上但在当时只是科学家的语言,LISP,LISP没有进入软件市场年代奠基性研究
1.11260年代计算机硬件转入集成电路成本大幅度下降应用普及的障碍是语言及软件这就促60使对编译技术的研究编译技术的完善表现在大型语言、多种流派语言的出现年哈佛大学的提出语言它是面向数学(矩阵)的语言它定义了一套1962K.Iverson APL古怪的符号,联机使用非常简洁,深得数学家喜爱它提出动态数据(向量)的概念年公司贝尔试验室提出正文处理的可以处理代数公式、1962ATT R.Griswold SNOBOL,语法、正文、自然语言以后发展为年代后裔叫用于测试SNOBOL3,SNOBOL48ICON,O年美国公司组织了一个委员会试图研制一个功能齐全的大型语言希望它兼有196344IBM和的功能,有类似完善的定义及控制结构,名字就叫程序设计FORTRAN COBOLALGOL60语言程序员可控制程序发生异常情况的异常处理、并行处理、中断处理、存储控制等PL/1所以它的外号叫“大型公共汽车”它是大型通用语言的第一次尝试,提出了许多有益的新概念、新特征但终因过于复杂、数据类型自动转换太灵活、可靠性差、低效,它没有普及起来但公司直到年代在它的机器上还配备IBM80PL/L年为普及程序语言教育,美国达特茅斯学院的和研制出交互式、解释型1967J.G.Kemeny语言(“初学者通用符号指令码字头)由于解释程序小(仅)赶上年代微机大BASIC8K70普及,取得众所周知的成就但是它的弱类型、全程量数据、无模块,决定了它只能编BASIC制小程序它是程序员入门的启蒙语言语言是美国的教授于年开发的小型语言其目的是无数学基础LOGO MITS.Papert1967的青少年也能学习使用计算机,理解程序设计思想,自己编制过程或程序但直到年代初微80机普及到家庭它才受到重视是交互式语言,用户编程就在终端前定义过程命令,并利LOGO用系统提供的命令构成程序的数据是数、字、表由于它能方便地处理符号表,可以LOGO利用人工智能成果开发情报检索、演绎推理、自然语言会话小程序青少年可设计各种智能游戏屏幕上的海龟使青少年直观地构造各种图形递归程序的表达能力使青少年可受到自动程序良好训练年小组推出及(德州仪器公司机)1979MIT LOGOApple LOGO,TILOGO TI99/4A这两个版本最为普及是青少年入门的启蒙语言LOGO的近于自然语言的命令及海龟、键盘、程序、图形并用的使用风格,对以后的命令LOGO式语言、用户界面语言有一定的影响年挪威计算机科学家等人研制出通用模拟语言它以1967O.J.Dahl SIMULA67ALGOL60为基础,为分层模拟离散事件提出了类()的概念类将数据和其上的操作集为一体,定Class义出类似类型的样板以实例进入运算这是抽象数据类型及对象的先声年代软件发展史上出了所谓的“软件危机”事情是由年美国金星探测卫星“水手601962二号”发射失败引起的经多方测试在“水手一号”发射不出错的程序在“水手二号”出了问题软件无法通过测试证明它是正确的于是,许多计算机科学家转入对程序正确性证明的研究这时,著名的荷兰科学家提出的语句是有害的”著名论断,引起了一场大E.Dijkstra“goto争论从程序结构角度而言,滥用语句会使程序无法分析、难于测试、不易修改这时也goto提出了全程变量带来的数据耦合效应、函数调用的副作用、类型隐含声明和自动转换所带来的难于控制的潜伏不安全因素等等过程语言中的一些致命性弱点年代对大型系统软件的需求60大为增长(如编制较完善操作系统、大型军用系统),要求使用高级语言以解决生产率之需,加上高级语言使用以来积累的经验,加深了人们对软件本质、程序语言的理解人们积极研制反映新理论的语言年,工作组成员改进了提出结构化的语言由于1964ALGOL N.Wirth ALGO60,ALGOL Wo它结构简洁、完美成为软件教程中示例语言年,他带着参加新一ALGOL W1968ALGOL W代的研究委员会,即开发的工作组ALGOL ALGOL68追求的目标也是能在多个领域使用的大型通用语言年以为首ALGOL681965Wijngaarden的一批科学家开始研究新强调了语言设计中冗余性(少作隐含约定)、抽象性(数据ALGOLo抽象与控制抽象)、正交性(一个语言机制只在一处定义并与其它机制无关)强化了类型定义和显式转换;有并发、异常处理功能;保留允许有限制的函数边界效应过程可以作为got参数传递;用户可定义较复杂数据结构、定义运算符语法定义是半英语半形式化的语言作成可扩充式,也就是说,有一个相对完备的小语言核心,可以不断增加新特征以增强语言表达能力表达式采用利于快速编译和提高目标码效率的逆波兰表示法集中了当时语言ALGOL68和软件技术之大成但因学究气太重,一般程序员难于掌握强调语言简单的人持有不同看法但文本草案在坚持下通过了为此,等人发表了“少数人声明”Wijngaarden DijkstraN.Wirth带着竞争失败的回去研究以后著称于世的ALGOL WPascal的研制者一开始就本着“简单、有效、可靠”的原则设计语言年正式Pascal1971Pascal问世后取得了巨大的成功它只限于顺序程序设计是结构化程序设计教育示范语言有完全结构化的控制结构为了方便,除三种最基本的控制结构(顺序、、Pascal if-then=else)外,又扩充了二种(、)程序模块有子程序(过程和函数),分程序,while-do do-until for-do o可任意嵌套,因而有全程量、局部量、作用域与可见性概念保留语句但不推荐使用got的数据类型大大丰富了,有整、实、字符、布尔等纯量类型有数组、记录、变体Pascal记录、串等结构类型;增加了集合、枚举、指针类型为用户描述复杂的数据结构乃至动态数据提供了方便所有进入程序的数据都要显式声明、显式类型转换并加强了编译时刻类型检查、函数的显式的值参和变量参数定义便于限制边界效应在人们为摆脱软件危机而对结构化程序设计寄于极大希望的时代,得到很快的普及它也是对以后程序语言有较大影响的Pascal里程碑式的语言年代完善的软件工程工具
1.12370硬件继续降价,功能、可靠性反而进一步提高人们对软件的要求,无论是规模、功能、还是开发效率都大为提高了仅管得到普遍好评,但它只能描述顺序的小程序,功能太弱Pascal在大型、并发、实时程序设计中无能为力程序越大越要求高的抽象力、安全性、积少成多的模块拼合功能为了对付日益加剧的新意义上的软件危机年代语言继续发展,在总结70PL/1和失败的基础上,研制大型功能齐全的语言又一次掀起高潮ALGOL68年代是微机大发展的时代设计精巧的小型过程语言藉微机普及得到发展软件市场
70、、汇编的三分天下开始缓慢地退去结构化、力图在FORTRAN COBOLIL FORTRANCOBOL新的竞争中保全自己的地位,专用语言丛生一旦证实它的普遍性,它就变为通用语言就是在这种情况下成长起来的优秀语言C硬件的完善使得过去难以实施的组合爆炸算法得以缓解人工智能的专家系统进入实用发展为和两大分支,其他智能语言陆续推出特别是在LISP INTELLISP MACLISP Backus1978年发表“程序设计能从冯•诺依曼风格中解放出来吗?”一文非过程式语言、高抽象模式语言大量涌现年代继年代的形式语言语法研究,形式语义取得重大成果最先是维也纳实验7060IBM室集合欧洲著名的计算机科学家于年写出的操作语义该语义用维也纳定义语言1972PL/1VDL表达,长达页,终因抽象层次太低,而此时(年)牛津大学和提出15001971D.Scott CStrachey了更加数学化的指称语义学,维也纳实验室转而研究的指称语义描述年PL/11973-1978和开发了维也纳开发方法所用语言是虽然巨大投资(D.Bjorner C.Jones VDMMeta IV
3.5亿)未见可见效益,终止了维也纳实验室的语义学研究方向,但方法及指称语言学对IBM VDM计算机语言发展影响是深远的年和用指称语义写语义发现了1973C.Hoare WirthPascal Pascal的设计上的许多问题竟做不下去以后还用于多种语言如指导编译器的开发VDM CHILL,Ada,1971-72年,DEC公司和卡内基・梅隆大学的Wulf合作,开发了PDP(以后是VAX)上的系统程序设计语言它是无类型的结构化语言,没有语句有异常处理和汇编接口,Bliss goto面向表达式直到年代末公司还用它作系统设计80DEC年,公司贝尔实验室开发了语言语言的原型是年开1972ATT RitchieC C1969Richard发的系统程序设计语将改造成语言,用于重写多用户操作BCPL K.Thompson BCPLB UNIX系统在机的第五版时用的是将改造后的扩充了类型(是无类型的)PDP-11UNIX B Co CB年第五版左右的源程序是用写的它使成为世界上第一个易于移植的1973UNIX90%C UNIX操作系统以后发展成为良好的程序设计环境,反过来又促进了的普及UNIX C语言是个小语言,追求程序简洁,编译运行效率高是一个表达能力很强的、顺序的、结C构化程序设计语言它给程序员较大的自由度,下层数据转换灵活程序正确性完全由程序员负责上层是结构化的控制结构,有类似的数据类型它的分别编译机制使它可构成大Pascal程序输入/出依赖使语言简短语言学家极力反对的语句、无控制指针、函数边UNIX,goto界效应、类型灵活转换、全程量这些不安全的根源全部具备在某种意义下得益于灵活的C C指针,函数副作用和数据类型灵活的解释易读性又不好,偏偏程序员都喜爱它因为它简洁,近于硬件,代码高效,并有大量环境工具支持程序写起来又短,调试起来又快微机上的C各种移植版本的语言,对成为通用的程序设计语言起到了推波助澜的作用语言正以席C CC卷系统程序设计领域的势头发展,并向应用领域扩展以后的发展把与它同期出现的远Pascal远抛在后面,成为系统软件的主导语言年法国大学的研制出非过程的语言有着完全崭新1972Marseille P.Roussel Prolog Prolog的程序设计风格,它只需要程序员声明“事实”“规则”事实和规则都以一阶谓词的形式表示规则的执行是靠该系统内部的推理机,而推理机按一定的次序执行在这个意义上Prolog它又有点过程性以回溯查找匹配,的数据结构类似的记录或的表它是以Prolog PascalLISP子句为基础的小语言,最初被解释执行,编译是很久以后的事,由于是以逻辑推Prolog Prolog理作为模型的语言,它可以直接映射客观世界事物间逻辑关系在人工智能研究中得到了广泛的应用,年代日本声称研制的五代机以作为主导语言并研制机80PrologProlog年代,在传统语言中出现了以下有代表性的语言70为了开发大型可维护程序,施乐公司年由领导研制了语言1972-74Geschke MesaMesa是强类型结构化语言,有模块(若干子程序集合)概念和抽象数据类型支持并发程序设计,由监控器协调各模块执行有分别编译,异常处理机制保留语句,也可以抑制类型检查goto可配置语言编译后的各模块Mesa年的和提出语言,它突出的是数据抽象数据抽象是年代1974MIT LiskovZilles CLU70类型强化和抽象技术的重要成果,它允许用户定义抽象的数据类型这些类型的定义和它的实现可显式地分开定义描述了语义,实现对于使用该数据的用户是无关紧要的,因而,利于修改增强模块性和独立性,从而易于保证程序正确数据抽象可定义更远离机器而近于人类的数据概念如堆栈就可定义为抽象数据类型人们可通过压入数据、弹出数据的操作对栈体进行操作其外在行为就是后进先出的数据栈,而栈体可由数组、或链表、或记录任一种数据结构实现的抽象数据类型称之为簇()由构造算子(按簇的样板建立运算对CLU ClusterConstructor象(实例)无无全程量概念用户可定义新的迭代(通过迭代算子)CLU goto,Iterator数据抽象在年卡内基.梅降大学和开发的语言中是数据模型1975Wulf ShawALPHARD的特点是支持程序的验证程序设计和验证同时进行FORM ALPHARD另一个支持程序验证的语言是加州大学和加拿大的于年到年开发Poperk Horning197677的为了易于验证,无语句,指针仅限于集合类型,类型兼容有严格的定义函EUCLID got,数调用绝无边界效应编译自动生成验证用的断言以后发展成数据流语言EUCLID在并发程序方面,年丹麦学者开发了并发它没有追求大而全,只是1975B.Hanson Pascal将向并发方面作了扩充,希望用写操作系统有抽象数据类型的类()机制Pascal PascalClass控制方面提出进程类和管程类的概念通过语句激活类实例,语句使进程无限循环地init cycle运行通过管程(管理资源的模块)实现进程通讯有较强的静态类型检查,可查出静态“死锁”令人不解的是正当人们对进程、管理概念充分评价时,本人放弃了这些概念B.Hanson1981年发表了小型系统程序设计语言仅用并发语句控制并发进程的执行极力推崇语Edison,Hanson言的简单性,所以比并发小得多,普通(不大的)微机都可以运行但其表达能Edison Pascal力比差多了没有达到并发那样的影响C Pascal在结构化程序设计方面是一个示范性语言,在推行结构化程序设计教学上发挥了卓Pascal越的作用,但在工程实践上暴露出设计上的许多缺点除了无独立模块和分别编译机制Pascal不能编大程序而外,原来它的强类型是有漏洞的类型等价似乎是按名等价,实现是按结构等价最后的结论它是“伪强类型”数组定长对处理字符串很不方便,布尔表达式求值定义不严,规定太死,难于写出灵活的输入/输出声明顺序过严,无静态变量概念(局部量一旦I/O所在局部块执行完毕就消失渚给程序设计带来不便从小而灵活方面,它又不及没有位()BC,bit级操作,指针操作限制过死于是的设计者年又开始开发语言,年正Pascal1975Modula1977式发布为Modula-2除了改进的上述弱点而外,最重要的是有模块结构可分别编译的模块是Modula-2Pascal用户程序的资源系统资源也以模块形式出现模块封装了数据和操作(过程),模块定义和模块实现显式分开程序员在定义模块中通过移入,移出子句控制程序资源(类型、变量、过程、子模块)的使用增加了同步进程机制以支持并发程序设计,有有限的低级设施直接和系统打交道Modula-2取消语句、增加语句中机制,封装的模块可作抽象数据类型设计它是用goto caseotherwise于系统设计的强类型语言西欧的计算机科学家对是欢迎的,但它不巧与美国开发的Modula-2非常近似,与竞争处于非常不利的地位尽管它的句编译器具有万句编译Ada Ada9000Ada20器的功能,也没有取得那样的成就80%Pascal年代中期美国软件的最大用户美国国防部(美国软件市场约经费直接或间接与它相702/3关)深感软件费用激增并开始研究原因研究结果表明,在硬件成本降低和可靠性提高的同时,软件费用不仅相对数,绝对数也在增加美国军用的大量大型、实时、嵌入式系统软件开发方法落后、可靠性差语言众多(常用种,加上派生方言多达种)造成不可移植、400-5001500难于维护为摆脱这种新的软件危机下定决心搞统一的军用通用语言从年成立高级语言工1975作组开始投资五亿美元,前后八年研制出程序设计语言是在国际范围内投标设计的,Ada Ada法国的一家软件公司中标,成为发明人多达名第一流软件专家参与了开发J.Ichbian Ada1500或评审它反映了年代末软件技术、软件工程水平为了提高软件生产率和改善软件可移植70性,提出开发语言的同时开发支持该语言的可移植环境()APSE o是强类型结构化语言封装的程序包是程序资源构件用户只能看到程序包规格说明Ada中显式定义的数据(包括抽象数据类型)和操作数据结构和操作(过程或函数)的实现在程序包体中完成封装支持模块性和可维护性规格说明和体的分离支持早期开发(可延迟决策)分别编译机制可组成复杂的大型软件有并发、异常机制可定义精确的数据(如浮点数小数点后任意多的位数)有将数据Ada对象、类型、过程参数化的类属机制有为目标机写目标程序(机器语言的或汇编语言地)的低级设施,可对字节、字位操作的私有类型支持数据隐藏,程序包可实现数据抽象标Ada识符和运算符重载概念,既方便程序员又使程序好读且安全强调大型系统可读性胜于可写性,程序自成清晰的文档Ada语言的开发过程完全按软件工程方式进行严格禁止方言美国国防部有一个严格管Ada理及其环境的机构(联合规划办公室)负责的确认、修改、维护、培训从Ada AJPOAda Ada业界转向软件工程方法开发软件的意义上,也称之为里程碑式语言Ada由于过多强调安全性和易读性,编译程序要做较多的静态检查,因而体积庞大(约Ada Ada万句、的微机装下了微机编译就剩不下工作空间了)程序代码较长,虽不像20512KB Ada繁琐但要比语言程序长运行效率,特别是嵌入式实时控制应用中,通过交叉编COBOL C60%o译得到的目标机代码一时还难满足要求环境工具发展缓慢,因为除军方外民间公司更乐于开发对所有语言通用的计算机辅助软件工程环境()自年代第一个语言版本,年修CASE8083改定型至今,没有达到投资者预想的成就目前已看到只反映年代初期的软件工Ada Ada8380程技术随着软件工程本身向集成化、可重用、面向对象方向发展,已有一些不适应了但Ada美国军方还在全力支持,年完成面向对象改造推出了增加了标签类型、类宽1995Ada Ada-950类型、抽象类型;放宽了访问类型;使一个静态强类型语言可以支持的动态束定这种改造00非常痛苦,使语法规则增至条,成为最庞大臃肿的语言耐人寻味的是很Ada-95277Ada-95块被和接受,它成为世界上第一个有法定标准的面向对象的语言ANSI ISO年代末到年代初值得一提的还有语言是典型的中级语言它是汇7080FORTH FORTH编语言指令码向用户自定义方向的发展也就是说,用户可以面向一个堆栈机器模型定义操作命令一一字()最低层的字是指令码,逐层向上,上层字由下层组成因此,系统word FORTH有良好的继承性系统提供核心字、解释器字、编译字和设备字对于简单的计算解释器字直接执行命令(字),复杂计算可将字定义编译成目标码存入堆栈供以后执行有汇编字集合以便用户直接使用机器,要求字集合操作数值计算,引用字集合使用户可以引用系统和用以前已定义的字程序员首先查看系统中字的字典,以它们组合成新字,进而构成程序FORTH FORTH程序的逆波兰表示法便利于解释和编译,这对长期从事汇编编程的程序员并不生疏把FORTH具体的机器抽象为堆栈机,既可以使程序员直接操纵机器又不涉及具体机器指令码、操作码、存储安排而且良好的继承性使程序越编越短,在最终用户层一两个命令就完成了程序设计它大受控制领域、要求单片、单板计算机(例如仪表工业)领域的程序员喜爱是一个人开发的语言,他于年在机器上实现第一个FORTH C.Moore1968IBM1130FORTH他说他的语言是第四代的()由于只允许五个字符的名字才叫Fourth-Generation1130FORTH年成立公司并把它投入航天工程应用,发展了通用商务系统此后世界各1973FORTH FORTH地开始重视年成立欧洲用户小组()年成立标准化FORTH1976FORTH EFUG,1978FORTH国际组织,年发布标准文本与此同时美国爱好者小组)也制定了80FORTH-79FORTH FIG标准各国天文行业,仪表行业纷纷以其为行业用计算机语言并不好读,figFORTH FORTH也不宜编大程序但在它自己的领域简单好用、扩充方便、编译迅速与传统语言追求的目标大相径庭给人耳目一新年代的面向对象发展的大、功能齐全、开发耗资可以说是程序设计语言之最但它还没有普及就有些落伍Ada了可能今后不再有人再投入巨资去开发大型过程语言年代继续向软件危机开战,但软件工程以陈旧技术难于作出庞杂的软件工具为了改善80这种情况,人们乞灵于面向对象技术程序设计语言纷纷面向对象靠拢正如上一个年程序10设计语言结构化一样这是主要特点年代的第二个特点是“用户友好”的所谓第四代语言的出现80年代的第三个特点是各种技术相互渗透各种更高级非过程性语言出现80年美国施乐公司保罗•奥特研究中心的领导的软件概念小组为方便不同用户处1972A.Kay理各种信息在小机器上搞了一个计划它以全部的“对象”概念建立自己的系统Dynabook1980年作为正式的发布版本Smalltalk-80语言是该系统的软件专用的硬件机、环境、用户界面、面向对象程序Smalltalk Smalltalk设计风格构成了整个系统“对象”是有自己的数据和操作的实体,各对象相对封闭程序设计就是建立应用系统中的对象群,并使之相互发消息接到消息的对象就在自己封闭的存储中响应执行操作操作的结果是改变这组对象的状态、完成计算(发出输出消息,对象响应后完成输出)为了使各自封闭的对象数据和操作不致多次重复定义有类和继承的概念类如Smalltalk同传统语言中的类型,只有类的实例进入实际运算(叫实例对象)类对象中的数据和操作可为它的子类继承,它自己的数据和操作也继承自超类于是一个系统就必须有支持它Smalltalk的一个类库,它象一棵大树,所有的行之有效类都在这棵大树的某个位置上用户只要选取其中某些类稍加修改变成自己问题所需要的类(子类),定出通讯协议,让它们的实例相互通讯完成计算无论是系统对象和用户定义的对象都按不同的抽象层次放在统一的类库中例如,向编译对象发消息并传送用户对象,该用户对象(程序)就被编译了中只有不同抽Smalltalk象层次的对象,小到一个整数、大到一个系统都叫对象,且别无其它计算单元面向对象程序设计的概念因此而出因为它天然的封装性体现了模块性和数据隐藏,利于维护修改它的继承性实质Smalltalk上是软件的重用这对困惑于大程序难于管理的软件工程学无疑是一条绝好出路类对象概念来自响应消息的方法表达式求值类似的归约它本Smalltalk SIMULA67,LISP身是在小机器上开发的小系统庞大的类库占去了很大的空间,难于编制大型程序加上它独特的编程风格,本身并未发展起来但面向对象思想,语言和环境一致性;交互式和极Smalltalk端用户友好(用菜单和鼠标即可上机),对年代语言和计算系统产生了巨大影响它也可称80之里程碑式的语言各种过程语言,甚至汇编语言都借鉴对象思想,以求能支持面向对象程序设计年相82-86继出现、、(汇编程序改造)Object PascalObjective-C ObjextAssembler68000Object、它们以原有语言采纳对象——消息编程模式LOGO ObjectFROTH另一些语言向类、对象延伸以对象一一引用编程模式编程如年公司推出的85ATT C++年公司的87Borland TurboPascal
5.5传统的人工智能语言也向面向对象上发展施乐公司年在基础上研制了1983Intel LISP是面向对象美国西海岸版本年美国符号处理公司在的机上开发了LOOPSo LISP85MIT LISP称之为东海岸版本有更为灵活和复杂的多继承性年施乐公司又作出Flavos,Flavos85Common年,组将它们统一为年,日本分公司开发了LOOPS1988ANSI X3J13CLOS85IBM SPOOLo是面向对象的扩充年和施乐联合开发的并发预处理程序,也是支持面Prolog86Valcan Prolog向对象的年代在软件发展史上是数据库成熟的年代数据库有数据描述语言数据操作语言70DDL它们都是为实现某种模式数据库的专用语言目标简单,在所应用的领域高效因此,DML不能以通用程序设计语言代替数据库给用户以界面(即查询)语言对于简单程序没有必要转到通用语言再编程序查询语言进一步扩充,就形成一系列查询命令加上约束条件控制的非过程语言如年成为正式标准SQL1988SQL ANSI/ISO年代软件环境大发展操作系统原有的作业控制语言)和系统调用命令也逐步发展80CL为该环境的统一的界面语言如的UNIX Shell年代系统软件中开发环境的思想向各专业渗透各专业都为本专业的最终用户提供简便80的开发环境即事先将程序模块以目标码存放计算机,用户只需简单的命令,甚至本专业常用的图形就可组成应用程序这些图形、菜单、命令即用户界面语言这些语言共同的特点是声明性(只需指明要做的事)、非过程性、简单、用户友好而应用程序的实现可由系统自己完成(低层有固定不变的计算模型,如关系运算,也可以连接备用模块智能推理)这就所谓的第四代语言()4GL并没有为程序设计语言学带来什么新概念和新特征一般用传统技术做出界面语言解4GL释器要求环境有较好的工具支持(应用程序、程序库、各种测试、调试、文档工具)最简单的是图形一一菜单,用户不用击键即可完成计算(用鼠标器)4GL是硬件高速发展和快速降价必然的结果因为不可能在短期内培养出与硬件发展需要4GL出匹配的那么多的程序员但不易编制开创性程序4GL九十年代网络计算语言九十年代计算机硬件发展速度依然不减每片芯片上晶体管数目仍然是一年半增加一倍计算机主频从兆赫增力口至」兆赫(每秒钟可执行指令),价格进一步低12-25I500-600750MIPS廉使用方式也从多人一机的分时系统到一人一机局域网计算,到每人都成为拥有全球资源的客户建立在异质网上的多媒体环境已成为客户端使用环境的主流支持“所见即所得”的用户界面的“语言”大量涌现•由于有良好环境支持,程序设计重点从算法加数据结构实现技术向规模说明描述方面转移规模说明语言在年代已有研究()在个80META-IV,EPROL,HOPE,CLEAR SPECINT,Z别具体领域也能实用但作为通用,哪怕是某个行业建立在域分析基础上的规格说明语言尚未出现■环境智能化、规模说明语言自动生成目标码客观上要求加入人工智能技术异质网环境推行后各结点上数据库资源共享都要求各语言间不要有人为的断层因此,多范型语言研究会有较大发展年代向面向对象扩充已经出现多范型语言,如(命令式加对象式)、80C++,Ada95(函数式加对象式为外小型研究有(关系式加逻辑式)、(函CLOS0TABLOG Funlog数式加逻辑式值得注意的是加拿大的和美国的语言,它们试图将五种范Nial1983-88G1986型命令式+对象式+逻辑式+函数式+关系式统一在一个语言之中虽然问题重重,但可由此发现许多新概念和新特征,对于程序设计语言研究是非常有利的•随着面向对象数据库和面向对象操作系统的成熟,完全消灭“语义断层”的数据库程序设计语言和持久性程序设计语言终将汇合并标准化这样,程序运行时大量文件到内DBPL PPL存转换则可以取消,从而增大了计算机的实岷时性,甚至取消文件概念有了较大发展,种类花色增多,行业标准出现支持它们的通用程序设计语言是、•4GL C、C++Ada各通用程序设计语言的发展及其相互影响见图Mo。
个人认证
优秀文档
获得点赞 0