第3单元 课文A:编程语言
一、引言
在计算机科学中,编程语言是用来编写可被计算机运行的一系列指令(计算机程序)的人工语言。与英语等自然语言相类似,编程语言具有词汇、语法和句法。然而,自然语言不适合计算机编程,因为它们能引起歧义,也就是说它们的词汇和语法结构可以用多种方式进行解释。用于计算编程的语言必须具有简单的逻辑结构,而且它们的语法、拼写和标点符号的规则必须精确。
编程语言在复杂性和通用程度上大相径庭。有些编程语言是为了处理特定类型的计算问题或为了用于特定型号的计算机系统而编写的。例如,FORTRAN和COBOL等编程语言是为解决某些普遍的编程问题类型而编写的——FORTRAN为了科学领域的应用,而COBOL为了商业领域的应用。尽管这些语言旨在处理特定类型的计算机问题,但是它们具有很高的可移植性,也就是说它们可以用来为多种类型的计算机编程。其他的语言,譬如机器语言,是为一种特定型号的计算机系统,甚至是一台特定的计算机,在某些研究领域使用而编写的。最常用的编程语言具有很高的可移植性,可以用于有效地解决不同类型的计算问题。像C、PASCAL和BASIC这样的语言就属于这一范畴。
二、语言类型
编程语言可划分为低级语言和高级语言。低级编程语言或机器语言,是编程语言中最基础的类型,能被计算机直接理解。机器语言的区别取决于制造商和计算机的型号。高级语言是在计算机能够理解和处理之前必须首先翻译成机器语言的编程语言。C、C++、PASCAL和FORTRAN都是高级语言的例子。汇编语言是中级语言,非常接近于机器语言,没有其他高级语言所表现出的语言复杂程度,但仍然得翻译成机器语言。
1、机器语言
在机器语言中,指令被写成计算机能够直接理解的被称之为比特的1和0的序列。机器语言中的一条指令通常告诉计算机4件事情:(1)到计算机主存储器(随机访问存储器)的哪个位置去找一或两个数字或者简单的数据段;(2)要执行的一个简单操作,例如将两个数字加起来;(3)将这个简单操作的结果存放在主存储器的什么位置;以及(4)到哪里找要执行的下一条指令。虽然所有的可执行程序最终都是以机器语言的形式被计算机读取,但是它们并非都是用机器语言编写的。直接用机器语言编程极端困难,因为指令是1和0的序列。机器语言中的一条典型的指令可能是10010 1100 1011,意思是将存储寄存器A的内容加到存储寄存器B的内容中。
2、高级语言
高级语言是利用人类语言中的词和句法的一套相对复杂的语句。它们比汇编语言和机器语言更类似于正常的人类语言,因此用来编写复杂的程序更容易。这些编程语言允许更快地开发更庞大和更复杂的程序。然而,在计算机能够理解之前,高级语言必须被称之为编译器的另外一种程序翻译成机器语言。因为这个原因,与用汇编语言编写的程序比较起来,用高级语言编写的程序可能运行的时间更长,占用的内存更多。
3、汇编语言
计算机编程人员使用汇编语言使机器语言程序编写起来更简单一些。在汇编语言中,每条语句大致对应一条机器语言指令。汇编语言的语句是借助易于记忆的命令编写的。在典型的汇编语言的语句中,把存储寄存器A的内容加到存储寄存器B的内容中这一命令,可以写成ADD B, A。汇编语言与机器语言具有某些共同特征。例如,对特定的比特进行操作,用汇编语言和机器语言都是可行的。当尽量减少程序的运行时间很重要时,程序员就使用汇编语言,因为从汇编语言到机器语言的翻译相对简单。当计算机的某个部分必须被直接控制时,如监视器上的单个点或者流向打印机的单个字符,这时也使用汇编语言。
三、高级语言的分类
高级语言通常分为面向过程的、函数式的、面向对象的或逻辑的语言。当今最常见的高级语言是面向过程的语言。在这种语言中,执行某个完整功能的一个或多个相关的语句块组成一个程序模块或过程,而且被给予诸如“过程A”的名称。如果在程序的其他地方需要同样的操作序列,可以使用一个简单的语句调回这个过程。实质上,一个过程就是一个小型程序。一个大程序可以通过将执行不同任务的过程组合在一起而构成。过程语言使程序变得比较短,而且更易于被计算机读取,但是要求程序员将每个过程都设计得足够通用,能用于不同的情况。
函数式语言像对待数学函数一样对待过程,并允许像处理程序中的任何其他数据一样处理它们。这就使程序构造在更高、更严密的水平上得以实现。函数式语言也允许变量——在程序运行过程中可以被用户指定和更改的数据符号——只被赋值一次。这样,通过减少对语句执行的确切顺序给予关注的必要性,就简化了编程,因为一个变量没有必要每次在一个程序语句中用到,都重新定义或重新赋值。函数式语言的许多观点已经成为许多现代过程语言的关键部分。
面向对象的语言是函数式语言的发展结果。在面向对象的语言中,用来编写程序的代码和程序处理的数据,组合成叫做对象的单元。对象进一