程序设计语言是用于书写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言有3个方面的因素,即语法、语义和语用。语法表示程序的结构或形式,亦即表示构成语言的各个记号之间的组合规律,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,亦即表示按照各种方法所表示的各个记号的特定含义,但不涉及使用者。
历史
有许多用于
特殊用途的语言,只在特殊情况下使用。例如,
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 应用软件的程序设计语言。
第四代非过程化语言
4GL 是非过程化语言,编码时只需说明“做什么”,不需描述算法细节。
数据库查询和
应用程序生成器是 4GL 的两个典型应用。用户可以用数据库
查询语言(
SQL)对数据库中的信息进行复杂的操作。 用户只需将要查找的内容在什么地方、 据什么 根条件进行查找等信息告诉 SQL,SQL 将
自动完成查找过程。应用程序生成器则是根据用户的需求“自动生成”满足需求的高级语言程序。真正的第四代程序设计语言应该说还没有出现。所谓的
第四代语言大多是指基于某种
语言环境上具有 4GL 特征的
软件工具产品, System Z、如PowerBuilder、FOCUS 等。第四代程序设计语言是面向应用,为
最终用户设计的一类程序设计语言。它具有缩短应用开发过程、降低维护代价、最大限度地减少调试过程中出现的问题以及对
用户友好等优点。
主要语言
程序设计语言的选择
程序设计
语言特点不同,适用领域也不同,以下从不同角度介绍选择的方法。
(1)科学工程计算。需要大量的标准库函数,以便处理复杂的数值计算,可供选用的语言有
FORTRAN语言、C语言等。
(2)数据处理与数据库应用。
SQL为
IBM公司开发的数据库查询语言,4GL称为第4代语言。
(3)实时处理。实时处理软件一般对性能的要求很高,可选用的语言有汇编语言、
Ada语言等。
(4)系统软件。如果编写操作系统、
编译系统等系统软件时,可选用汇编语言、C语言、
Pascal语言和Ada语言。
(5)人工智能。如果要完成
知识库系统、
专家系统、
决策支持系统、推理工程、
语言识别、
模式识别等人工智能领域内的系统,应选择
Prolog、Lisp语言。
2、软件开发的方法
有时
编程语言的选择依赖于开发的方法,如果要用
快速原型模型来开发,要求能快速实现原型,因此宜采用4GL。如果是
面向对象方法,宜采用面向对象的语言编程。
良好的
编程环境不但能有效提高
软件生产率,同时能减少错误,有效提高
软件质量。
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)。功能性的语言一般允许变量直接使用
运行时计算出的值,而不是指出该值可能储存的
内存地址。
发展趋势
程序设计语言是软件的重要方面。它的
发展趋势是模块化、简明性和形式化。