程序设计语言的分类

1 按对机器依赖程度

   (1) 低级语言   面向机器,用机器直接提供的地址码、操作码语义概念编程。机器语言和汇编语言,宏汇编虽然抽象层次逐渐提高仍属低级语言的汇编语言(如8086汇编,68000汇编)。

   (2)高级语言 独立于机器,用语言提供的语义概念和支持的范型编程。如命令式(Pascal,C,Ada)、函数式(LISP,ML)、逻辑式(Prolog)、关系式(SQL)、对象式(Smalltalk,C++)。

   (3) 中级语言 可以编程操纵机器的硬件特征但不涉及地址码和操作码。如字位运算,取地址,设中断,开辟空间、无用单元收回,用寄存器加速等。高级汇编,C,FORTH属此列。

2 按应用领域

   (1) 商用语言 处理日常商业事务。有良好文字、报表功能,数据量大和数据库密切相关。代表语言是COBOL,RPG。

   (2)科学计算 数值计算量大,支持高精度、向量、矩阵运算。代表语言有FORTRAN、APL。

   (3) 系统程序设计 支持与硬件相关的低级操作,编写系统程序(操作系统,编译、解释器,数据库管理系统,网络接口程序)的语言,如C,Ada,Bliss,FORTH。

   (4) 模拟语言 模拟应用主要是以时间为进程模拟客观世界的状态变化。分离散事件模拟和连续模拟。代表语言有GPSS、SLAM、SIMULA 67。

   (5) 正文处理 主要操作对象是自然语言中字符(英文)。很方便产生报告、表格、代表语言是SMOBOL。

   (6) 实时处理 其特点是能根据外部信号控制不同的程序段并发执行。这类语言有并发Pascal、并发C、Ada、Mesa、OCCAM,FORTRAN-90,LINDA。用于通讯领域的程序设计语言都要有实时功能,如Gypsy、CHILL。

   (7)嵌入式应用 在一个大型机器(宿主机)上为小机器(或单片机) 开发程序,经调试后将它译为小机器(目标机)的目标码在小机器上运行叫嵌入应用。如机载、弹载计算机。这类程序一般都有实时要求,并近于系统设计。代表语言Ada。

   (8) 人工智能应用 这类程序是对人们的智力行为仿真。包括自然语言理解、定理证明、模式识别、机器人、各种专家系统。这类语言要能描述知识、并根据推理规则推断合理的结论。在符号运算上作谓词演算或λ演算是其推理运算的基本方式。代表语言有LISP和Prolog

   (9) 查询和命令语言   这是一类新兴的语言,是各种早期系统程序简单的用户命令的发展。数据库语言dBASE、SQL,操作系统UNIX的Shell语言为其代表。现代软件环境的用户界面语言更是丰富多采使用方便。其特点是与程序员的交互性和非过程性。

   (10) 教学语言 为了培养程序员或使学生很快入门,人们设计了教学用语言。例如,过程程序设计有BASIC,结构化程序设计有Pascal,青少年启蒙有LOGO。但往往由于对程序语言的作用没有全面理解,初学者学到一门启蒙语言后就企图用它作软件设计,这是十分有害的。

   (11) 打印专用 图文并用在各种打印机(包括激光)打印字体优美的报告、图形、图象。代表语言有: Postscript、Tex、Latex。

   (12) 专用于某类数据结构

    (a) 串处理   专用于处理正文字符串,抽取字符串,引用串函数,串形式匹配,回溯与穷举查找。代表语言有: SNOBOL、ICON。

    (b) 数组处理 构造和操纵矩阵,可整体操纵数组。代表语言有APL,Visicale,Loutus。

    (c)表处理 支持表的各种切割、连接操作。直接表I/O、动态堆栈分配。代表语言有: LISP、T、Scheme、Miranda。

   (13) 数据库应用

      (a) 数据库专用,可完成简单应用,复杂应用要嵌入通用程序设计语言,如SQL、Foxpro、Delphi、PowerBuilder。

(b) 数据库程序设计语言 既支持一般应用操纵临时对象(程序终止即消失),也可操纵数据库中持久对象,且可混合在一个程序中,如C++,C02,OPAL。

3 按实现计算方式

    (1) 编译型语言    用户将源程序一次写好,提交编译,运行编译得目标码模块。再通过连接编辑、加载成为内存中可执行目标码程序。再次运行目标码,读入数据得出计算结果。大多数高级程序设计语言属于这一类。

    (2) 解释型语言     系统的解释程序对源程序直接加工。一边翻译,一边执行。不形成再次调用它执行的目标码文件。大多数交互式(interactive)语言、查询命令语言采用解释型实现。典型的例子有BASIC、LISP、Prolog、APL、Shell、SQL、Java。它们的特点是所用翻译空间小,反应快,但运行效率慢。

4 按使用方式

    (1) 交互式语言   程序在执行过程中程序可陆续添加和修改,以对话方式实现计算。一般是解释型的。由于程序设计支持环境的发展,交互式语言可方便为用户调用各环境工具,有日益发展的趋势。

    (2) 非交互式语言    多数编译型语言的目标码文件执行期间,程序员不能干预,只能在执行完毕再修改。

5 按程序设计范型

    (1) 单范型语言   范型即程序组织和实现计算的模式

    (a) 命令式语言   计算实现的模型如果按冯·诺依曼原理强制改变内存中的值叫命令(或译指令、强制Imperative式)的。所有过程语言都基于这个原理。由于强制改变值,程序状态的变化没有一定规则,程序大了就很难查错,很难调试,不易证明其正确。组织程序的范型即: 算法过程+数据结构。到目前软件开发主导语言仍是命令式语言。近代命令式语言增加了模块强制类型检查、抽象数据类型、类属等机制可开发较安全、可靠的大程序。

    (b) 面向对象语言    将数据和其上的操作封装于对象中。对象归属于类对象,类对象有继承,实例对象上的操作可动态决定。程序是相互发消息通信的对象集合。代表语言有Simula-67,Smalltalk。

    (c) 数据流语言 传统过程语言中以程序控制保证程序功能实现,数据是分散的,为控制流服务。数据流语言以数据对象为核心加工过程为其服务。藉以提高运算速度。这种语言的程序设计方法学模型是基于数据流。数据流语言有Val和EUCLID。

    (d)函数式语言 程序对象是函数及高阶函数,组织程序的范型是函数定义及引用。代表语言有LISP、FP、ML、Miranda。

    (e) 逻辑式语言 程序对象是常量,变量和谓词、组织程序的范型是定义谓词并写引用谓词的公式,并构造满足谓词的事实库和约束关系库。代表语言有Prolog。

       函数式和逻辑式语言不需要强制求值故也称施用式语言(Application),又因无需涉及求值过程,只定义“求什么?有什么(函数)关系”故也叫声明式(declarative)语言。

    (2) 多范型语言

      一个程序设计语言不止支持一种程序设计范型,最初为将一个常用的语言扩充具有另一范型的能力,老语言对象化就有很多实例,即它们是两范型的,有目的研究五种范型组合是Nail (1983)和G(1986)。

并发程序设计应该说也是一种范型,因为它在组织程序时程序执行的非顺序性和各成分相互通信的时间要求和单主机上顺序程序是不同的。但在各程序成分内的组织与设计与该种语言顺序部分没什么不同,即各种范型语言均向并发语言发展如Ada,Concurrent Smalltalk,Concurrent Prolog。并发语言必然是顺序部分的超集。

6 按断代划分

      由于硬件中从真空管到超大规模集成电路已经五代了。程序设计语言的断代当然也要按自已的特征:

    (1) 第一代语言1GL 50年代

    主要特征是面向机器,离不开地址码,操作码,存储空间分配。机器语言、汇编语言即是。

    (2) 第二代语言2GL 60年代

    主要特征是脱离机器面向算法过程的高级语言。有变量、赋值、子程序、函数调用概念。少量基本数据类型,有限的循环层次(三层至多七层)。一般无递归调用。FORTRAN、BASIC、ALGOL 60、COBOL即是。

    (3) 第三代语言3GL 70年代。

    主要特征是结构化控制结构,块级控制。有作用域和可见性概念。有丰富的数据类型,除基本类型增加了布尔、集合、字符类型而外,用户可自行定义结构数据,枚举数据,枚举数据,还可通过指针定义动态数据。第三代语言的典型代表是Pascal。第三代晚期,出现了程序(或模块)定义和实现显式分离特征: 规格说明(Specification)只定义程序的功能,体(body)是规格说明的过程实现。Ada和 Modala-2就是典型例子。

       (4) 第四代语言4GL 80年代

       主要特征是极端用户友好。最终用户(end user)只经过几天甚至几小时训练即可上机。它是声明式、交互式、非过程化语言。依赖于环境支持,一般都要有大的数据库。编制一个程序要比第三代语言所花时间少一个数量级。但由于把许多编程工作放在支持系统中自动完成,往往只有某一方面的功能,所以 到目前为止还没有通用的第四代语言。如LOTUS1-2-3只适合表格处理。dBASE适合数据库查询和应用。MANTIS、IOEAL、NATURAL、APPLICATION FACTORY声称凡COBOL程序都能编,但也仅限于数据处理。

(5) 第五代语言 5GL

习惯上把用于人工智能程序表达的语言称之为五代机语言或五代语言。实际上LISP早在1957年就设计出来了。它是对抽象的符号进行表处理而不是象ALGOL和FORTRAN那样算出数值,所以 一开始就用于数学定理证明之类的智能程序。70年代出现的Prolog更是为智能推理而设的,它们都是小语言,而早期都是解释执行的。它们只用一种程序设计模型在人工智能方向试探。它们的特点都是在上层按某种模式去开发程序,下层实现则千篇一律的笨办法(例如,Prolog用的是递归树查找的匹配方式)。于是,有人研究LISP机Prolog机,下层直接是推理单元而不必用冯·诺依曼机去模拟推理、找出匹配。但在非它所长的智能应用中LISP机、Prolog机笨拙无比。所以五代机及其语言目前只能说有了萌芽。真正五代机通用语言是什么,目前还很难预言。

       还有一种说法是把除正文语言之外的其他媒体语言称为5GL。从断代是革命而不是改良的角度多媒体语言研究应该称做第五代。但目前仅仅是把正文与其他媒体可等价的部分用其他媒体表达,从而简化程序设计(它还是基于正文的),如前所述,各媒体有其自身不可等价性(如声调、声音速度、强度带来的语义反意),怎样程序设计?目前尚不可知。


你可能感兴趣的:(程序设计语言的分类)