
程式设计语言
程式设计语言是用于书写电脑程式的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程式设计语言中,这些记号串就是程式。程式设计语言有3个方面的因素,即语法、语义和语用。语法表示程式的结构或形式,亦即表示构成语言的各个记号之间的组合规律,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程式的含义,亦即表示按照各种方法所表示的各个记号的特定含义,但不涉及使用者。
基本介绍
- 中文名:程式设计语言
- 外文名:PDL/Programming Language
历史
有许多用于特殊用途的语言,只在特殊情况下使用。例如,PHP专门用来显示网页;Perl更适合文本处理;C语言被广泛用于作业系统和编译器(所谓的系统编程)的开发。
高级程式设计语言(也称高级语言)的出现使得电脑程式设计语言不再过度地倚赖某种特定的机器或环境。这是因为高级语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。最早出现的程式语言之一FORTRAN的一个主要目标,就是实现平台独立。
释义
虽然大多数的语言可以既可被编译(Compiled)又可被解译(interpreted),但大多数只在一种情况下能够良好运行。在一些编程系统中,程式要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于BCPL,编译程式先编译一个叫做“0代码”的转换程式(representation),然后再使用虚拟器转换到可以运行于机器上的真实代码。这种成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二进制码,虽然在很多时候,中间过渡的代码往往是解译,而不是编译的。
如果所使用的翻译的机制是将所要翻译的程式代码作为一个整体翻译,并之后运行内部格式,那幺这个翻译过程就称为编译。因此,一个编译器是一个将可阅读的程式文本(叫做原始码)作为输入的数据,然后输出执行档(object code)。所输出的执行档可以是机器语言,由计算机的中央处理器直接运行,或者是某种模拟器的二进制代码。
如果程式代码是在运行时才即时翻译,那幺这种翻译机制就被称作解译。经解译的程式运行速度往往比编译的程式慢,但往往更具灵活性,因为它们能够与执行环境互相作用。
成分
语言的种类千差万别。但是,一般说来,基本成分不外4种。
- 数据成分。用以描述程式中所涉及的数据。
- 运算成分。用以描述程式中所包含的运算。
- 控制成分。用以表达程式中的控制构造。
- 传输成分。用以表达程式中数据的传输。
程式设计语言的特性
程式设计语言具有心理工程及技术等特性。
(1)心理特性:歧义性、简洁性、局部性、顺序性、传统性。
(2)工程特性:可移植性,开发工具的可利用性,软体的可重用性、可维护性。
(3)技术特性:支持结构化构造的语言有利于减少程式环路的複杂性,使程式易测试、易维护。
分类
自20世纪60 年代以来,世界上公布的程式设计语言已有上千种之多,但是只有很小一部分得到了广泛的套用。从发展历程来看,程式设计语言可以分为 4 代。
第一代机器语言
机器语言是由二进制 0、1 代码指令构成,不同的 CPU 具有不同的指令系统。机器语言程式难编写、难修改、难维护,需要用户直接对存储空间进行分配,编程效率极低。这种语言已经被渐渐淘汰了。
第二代彙编语言
彙编语言指令是机器指令的符号化,与机器指令存在着直接的对应关係,所以彙编语言同样存在着难学难用、容易出错、维护困难等缺点。但是彙编语言也有自己的优点:可直接访问系统接口,彙编程式翻译成的机器语言程式的效率高。 从软体工程角度来看,只有在高级语言不能满足设计要求,或不具备支持某种特定功能的技术性能(如特殊的输入输出)时,彙编语言才被使用。
第三代高级语言
高级语言是面向用户的、基本上独立于计算机种类和结构的语言。其最大的优点是:形式上接近于算术语言和自然语言,概念上接近于人们通常使用的概念。高级语言的一个命令可以代替几条、几十条甚至几百条彙编语言的指令。因此,高级语言易学易用,通用性强,套用广泛。高级语言种类繁多,可以从套用特点和对客观系统的描述两个方面对其进一步分类。
一、从套用角度分类
从套用角度来看,高级语言可以分为基础语言、结构化语言和专用语言。
(1) 基础语言
基础语言也称通用语言。它历史悠久,流传很广,有大量的已开发的软体库,拥有众多的用户, 为人们所熟悉和接受。 属于这类语言的有 FORTRAN、COBOL、BASIC、ALGOL等。FORTRAN 语言是目前国际上广为流行、也是使用得最早的一种高级语言,从 20 世纪90 年代起,在工程与科学计算中一直占有重要地位,备受科技人员的欢迎。BASIC 语言是在 20 世纪 60 年代初为适应分时系统而研製的一种互动式语言,可用于一般的数值计算与事务处理。BASIC 语言结构简单,易学易用,并且具有互动能力,成为许多初学者学习程式设计的入门语言。
(2) 结构化语言
20 世纪 70 年代以来,结构化程式设计和软体工程的思想日益为人们所接受和欣赏。在它们的影响下,先后出现了一些很有影响的结构化语言,这些结构化语言直接支持结构化的控制结构,具有很强的过程结构和数据结构能力。PASCAL、C、Ada 语言就是它们的突出代表。
PASCAL 语言是第一个系统地体现结构化程式设计概念的现代高级语言,软体开发的最初目标是把它作为结构化程式设计的教学工具。由于它模组清晰、控制结构完备、有丰富的数据类型和数据结构、语言表达能力强、移植容易,不仅被国内外许多高等院校定为教学语言,而且在科学计算、数据处理及系统软体开发中都有较广泛的套用。
C 语言功能丰富,表达能力强,有丰富的运算符和数据类型,使用灵活方便,套用面广,移植能力强,编译质量高,目标程式效率高,具有高级语言的优点。同时,C 语言还具有低级语言的许多特点,如允许直接访问物理地址,能进行位操作,能实现彙编语言的大部分功能,可以直接对硬体进行操作等。用 C 语言编译程式产生的目标程式,其质量可以与彙编语言产生的目标程式相媲美,具有“可移植的彙编语言”的美称,成为编写套用软体、作业系统和编译程式的重要语言之一。
(3) 专用语言
是为某种特殊套用而专门设计的语言,通常具有特殊的语法形式。一般来说,这种语言的套用範围狭窄,移植性和可维护性不如结构化程式设计语言。随着时间的发展,被使用的专业语言已有数百种,套用比较广泛的有 APL 语言、Forth 语言、LISP 语言。
二、从客观系统的描述分类
从描述客观系统来看,程式设计语言可以分为面向过程语言和面向对象语言。
(1) 面向过程语言
以“数据结构+算法”程式设计範式构成的程式设计语言,称为面向过程语言。前面介绍的程式设计语言大多为面向过程语言。
(2) 面向对象语言
以“对象+讯息”程式设计範式构成的程式设计语言,称为面向对象语言。比较流行的面向对象语言有 Delphi、Visual Basic、Java、C++等。
Delphi 语言具有可视化开发环境 , 提供面向对象的编程方法,可以设计各种具有Windows 内格的应用程式(如资料库套用系统、通信软体和三维虚拟现实等),也可以开发多媒体套用系统。
Visual Basic 语言简称 VB,是为开发应用程式而提供的开发环境与工具。它具有很好的图形用户界面,採用面向对象和事件驱动的新机制,把过程化和结构化编程集合在一起。它在应用程式开发中的图形化构思,无需编写任何程式,就可以方便地创建应用程式界面,且与 Windows 界面非常相似,甚至是一致的。
Java 语言是一种面向对象的、不依赖于特定平台的程式设计语言,简单、可靠、可编译、可扩展、多执行绪、结构中立、类型显示说明、动态存储管理、易于理解,是一种理想的、用于开发 Internet 套用软体的程式设计语言。
一、从套用角度分类
从套用角度来看,高级语言可以分为基础语言、结构化语言和专用语言。
(1) 基础语言
基础语言也称通用语言。它历史悠久,流传很广,有大量的已开发的软体库,拥有众多的用户, 为人们所熟悉和接受。 属于这类语言的有 FORTRAN、COBOL、BASIC、ALGOL等。FORTRAN 语言是目前国际上广为流行、也是使用得最早的一种高级语言,从 20 世纪90 年代起,在工程与科学计算中一直占有重要地位,备受科技人员的欢迎。BASIC 语言是在 20 世纪 60 年代初为适应分时系统而研製的一种互动式语言,可用于一般的数值计算与事务处理。BASIC 语言结构简单,易学易用,并且具有互动能力,成为许多初学者学习程式设计的入门语言。
(2) 结构化语言
20 世纪 70 年代以来,结构化程式设计和软体工程的思想日益为人们所接受和欣赏。在它们的影响下,先后出现了一些很有影响的结构化语言,这些结构化语言直接支持结构化的控制结构,具有很强的过程结构和数据结构能力。PASCAL、C、Ada 语言就是它们的突出代表。
PASCAL 语言是第一个系统地体现结构化程式设计概念的现代高级语言,软体开发的最初目标是把它作为结构化程式设计的教学工具。由于它模组清晰、控制结构完备、有丰富的数据类型和数据结构、语言表达能力强、移植容易,不仅被国内外许多高等院校定为教学语言,而且在科学计算、数据处理及系统软体开发中都有较广泛的套用。
C 语言功能丰富,表达能力强,有丰富的运算符和数据类型,使用灵活方便,套用面广,移植能力强,编译质量高,目标程式效率高,具有高级语言的优点。同时,C 语言还具有低级语言的许多特点,如允许直接访问物理地址,能进行位操作,能实现彙编语言的大部分功能,可以直接对硬体进行操作等。用 C 语言编译程式产生的目标程式,其质量可以与彙编语言产生的目标程式相媲美,具有“可移植的彙编语言”的美称,成为编写套用软体、作业系统和编译程式的重要语言之一。
(3) 专用语言
是为某种特殊套用而专门设计的语言,通常具有特殊的语法形式。一般来说,这种语言的套用範围狭窄,移植性和可维护性不如结构化程式设计语言。随着时间的发展,被使用的专业语言已有数百种,套用比较广泛的有 APL 语言、Forth 语言、LISP 语言。
二、从客观系统的描述分类
从描述客观系统来看,程式设计语言可以分为面向过程语言和面向对象语言。
(1) 面向过程语言
以“数据结构+算法”程式设计範式构成的程式设计语言,称为面向过程语言。前面介绍的程式设计语言大多为面向过程语言。
(2) 面向对象语言
以“对象+讯息”程式设计範式构成的程式设计语言,称为面向对象语言。比较流行的面向对象语言有 Delphi、Visual Basic、Java、C++等。
Delphi 语言具有可视化开发环境 , 提供面向对象的编程方法,可以设计各种具有Windows 内格的应用程式(如资料库套用系统、通信软体和三维虚拟现实等),也可以开发多媒体套用系统。
Visual Basic 语言简称 VB,是为开发应用程式而提供的开发环境与工具。它具有很好的图形用户界面,採用面向对象和事件驱动的新机制,把过程化和结构化编程集合在一起。它在应用程式开发中的图形化构思,无需编写任何程式,就可以方便地创建应用程式界面,且与 Windows 界面非常相似,甚至是一致的。
Java 语言是一种面向对象的、不依赖于特定平台的程式设计语言,简单、可靠、可编译、可扩展、多执行绪、结构中立、类型显示说明、动态存储管理、易于理解,是一种理想的、用于开发 Internet 套用软体的程式设计语言。
第四代非过程化语言
4GL 是非过程化语言,编码时只需说明“做什幺”,不需描述算法细节。
资料库查询和应用程式生成器是 4GL 的两个典型套用。用户可以用资料库查询语言(SQL)对资料库中的信息进行複杂的操作。 用户只需将要查找的内容在什幺地方、 据什幺 根条件进行查找等信息告诉 SQL,SQL 将自动完成查找过程。应用程式生成器则是根据用户的需求“自动生成”满足需求的高级语言程式。真正的第四代程式设计语言应该说还没有出现。所谓的第四代语言大多是指基于某种语言环境上具有 4GL 特徵的软体工具产品, System Z、如PowerBuilder、FOCUS 等。第四代程式设计语言是面向套用,为最终用户设计的一类程式设计语言。它具有缩短套用开发过程、降低维护代价、最大限度地减少调试过程中出现的问题以及对用户友好等优点。
资料库查询和应用程式生成器是 4GL 的两个典型套用。用户可以用资料库查询语言(SQL)对资料库中的信息进行複杂的操作。 用户只需将要查找的内容在什幺地方、 据什幺 根条件进行查找等信息告诉 SQL,SQL 将自动完成查找过程。应用程式生成器则是根据用户的需求“自动生成”满足需求的高级语言程式。真正的第四代程式设计语言应该说还没有出现。所谓的第四代语言大多是指基于某种语言环境上具有 4GL 特徵的软体工具产品, System Z、如PowerBuilder、FOCUS 等。第四代程式设计语言是面向套用,为最终用户设计的一类程式设计语言。它具有缩短套用开发过程、降低维护代价、最大限度地减少调试过程中出现的问题以及对用户友好等优点。
主要语言
- 习语言 即中文版的C语言
- O语言 O语言是一款中文计算机语言(或称套装:O彙编语言、O中间语言、O高级语言)
- APT( Automatically Pro-grammed Tools)——自动数控程式。第一个专用语言,用于数控工具机加工,1956。
- FORTRAN(FORmula TRANslation)——公式翻译程式设计语言。第一个广泛使用的高级语言,为广大科学和工程技术人员使用计算机创造了条件,1956。
- FLOW-MATIC。第一个适用于商用数据处理的语言,其语法与英语语法类似,1956。
- IPL-V(Information Processing Language V)——信息处理语言。第一个表处理语言,可看成是一种适用于表处理的假想计算机上的彙编语言,1958。
- COMIT(COmpiler Massachusetts Institute foTechnology) ——麻萨诸塞州理工学院编译程式。第一个现实的串处理和模式匹配语言,1957。
- COBOL(COmmon Business Oriented Language)——面向商业的通用语言。使用最广泛的商用语言,它是适用于数据处理的高级程式设计语言,1960。
- ALGOL60(ALGOrithmic language60) ——算法语言60。程式设计语言由技艺转向科学的重要标誌,其特点是局部性、动态性、递归性和严谨性,1960。
- 表处理语言(LIStProceessing——LISP。引进函式式程式设计概念和表处理设施,在人工智慧的领域内广泛使用,1960。
- JOVIAL(Jules Own Version of IAL)——国际算法语言的朱尔斯文本。第一个具有处理科学计算、输入-输出逻辑信息、数据存储和处理等综合功能的语言。多数JOVIAL编译程式都是用JOVIAL书写的,1960。
- GPSS(General-purpose Systems Simulator)——通用系统模拟语言 。第一个使模拟成为实用工具的语言 ,1961。
- JOSS(Johnniac Open-Shop System ——。第一个互动式语言,它有很多方言,曾使分时成为实用,1964。
- FORMAC(FORmula MAnipulation Compiler)——公式翻译程式设计语言公式处理编译程式。第一个广泛用于需要形式代数处理的数学问题领域内的语言,1964。
- SIMULA (SIMUlation LAnguage)—— 模拟语言 。主要用于模拟的语言,是ALGOL60的扩充,1966。SIMULA67是1967年SIMULA的改进。其中引进的“类”概念,是现代程式设计语言中“模组”概念的先声。
- APL/360 (A Programming Language)——程式设计语言360。一种提供很多高级运算符的语言,可使程式人员写出甚为紧凑的程式 ,特别是涉及到矩阵计算的程式 ,1967。
- PASCAL ( Philips Automatic Sequence CALcul-ator)——菲利浦自动顺序计算机语言。在ALGOL60的基础上发展起来的重要语言 ,其最大特点是简明性与结构化,1971。
- PROLOG(PROgrammingin LOGic)。 一种处理逻辑问题的语言。它已经广泛套用于关係资料库、数理逻辑、抽象问题求解、自然语言理解等多种领域中,1973。
- ADA。一种现代模组化语言。属于ALGOLPASCAL语言族,但有较大变动。其主要特徵是强类型化和模组化,便于实现个别编译,提供类属设施,提供异常处理,适于嵌入式套用,1979。
- Python 最好的字元串处理脚本语言。
- perl 广泛套用于unix/linux系统管理的脚本语言。
- ruby 日本人设计的一种被广泛学习使用的动态语言。
- C结构化程式设计语言的经典,它能完成你想要的一切。
- C++ 构建大型软体,要求速度与性能,可以使用它。
- JAVA SUN公司开发的一种基于JVM虚拟机的面向对象的语言,被广泛套用于移动设备。
程式设计语言的选择
程式设计语言特点不同,适用领域也不同,以下从不同角度介绍选择的方法。
1、项目的套用领域
(1)科学工程计算。需要大量的标準库函式,以便处理複杂的数值计算,可供选用的语言有FORTRAN语言、C语言等。
(2)数据处理与资料库套用。SQL为IBM公司开发的资料库查询语言,4GL称为第4代语言。
(3)实时处理。实时处理软体一般对性能的要求很高,可选用的语言有彙编语言、Ada语言等。
(4)系统软体。如果编写作业系统、编译系统等系统软体时,可选用彙编语言、C语言、Pascal语言和Ada语言。
(5)人工智慧。如果要完成知识库系统、专家系统、决策支持系统、推理工程、语言识别、模式识别等人工智慧领域内的系统,应选择Prolog、Lisp语言。
2、软体开发的方法
有时程式语言的选择依赖于开发的方法,如果要用快速原型模型来开发,要求能快速实现原型,因此宜採用4GL。如果是面向对象方法,宜採用面向对象的语言编程。
3、软体执行的环境
良好的编程环境不但能有效提高软体生产率,同时能减少错误,有效提高软体质量。
4、算法和数据结构的複杂性
科学计算、实时处理和人工智慧领域中的问题算法较複杂,而数据处理、资料库套用、系统软体领域的问题,数据结构.比较複杂,因此选择语言时可考虑是否有完成複杂算法的能力,或者有构造複杂数据结构的能力。
5、软体开发人员的知识
编写语言的选择与软体开发人员的知识水平及心理因素有关,开发人员应仔细地分析软体项目的类型,敢于学习新知识,掌握新技术。
数据模型
现代计算机内部的数据都只以二元方式储存,即开-关模式(on-off)。现实世界中代表信息的各种数据,例如名字、银行账号、度量以及同样低端的二元数据,都经由程式设计语言整理,成为高端的概念。
一个程式中专门处理数据的那个系统被称为程式语言的型态系统(type system);对型态系统的研究和设计被称为型态理论(type theory)。语言可以被分为静态型态系统(statically typed systems),例如C++和Java,和动态型态系统(dynamically typed systems),例如Lisp,JavaScript,Tcl和Prolog。前者可被进一步分为包含宣告型态(manifest type)的语言,即每一个变数和函式的型态都清楚地宣告,或type-inferred语言(例如MUMPS,ML)。
大多数语言还能够在内置的型态基础上组合出複杂的数据结构型态(使用数组,列表,堆叠,档案等等)。面向对象语言(Object Oriented Language,又译作“物件导向语言”)允许程式设计师定义新的数据型态,即“对象”或“物件”(objects),以及运行于该对象的函式(functions)和方法(methods)。
除了何时以及如何确定表达式和型态的联繫,另外一个重要的问题就是语言到底定义了哪些型态,以及允许哪些型态作为表达式的值。诸如C程式语言之类的低端语言允许程式命名记忆体位置、记忆体区域以及编译时的常量;ANSI C甚至允许表达式返回结构值(struct values)。功能性的语言一般允许变数直接使用运行时计算出的值,而不是指出该值可能储存的记忆体地址。
发展趋势
程式设计语言是软体的重要方面。它的发展趋势是模组化、简明性和形式化。
- 模组化。不仅语言具有模组成分,程式由模组组成,而且语言本身的结构也是模组化的。
- 简明性。涉及的基本概念不多,成分简单,结构清晰,易学易用。
- 形式化。发展合适的形式体系,以描述语言的语法、语义、语用。