语言发展
计算机的硬件只能识别0和1组成的机器指令,而机器指令是最基本的计算机语言,但是我们平时进行程序设计时肯定不会用机器语言来编程,因为用它的效率低,更让人难以理解。因此聪明的人类发明了汇编语言,它使用符号来表示指令,例如用ADD表示加法,这就容易理解了。但是汇编语言和机器语言十分接近,其书写取决于机器指令,因此它还是一种面向机器的语言,所以称它为低级语言。相应的,又在此基础上,开发出了功能更强、抽象更高的面向各类应用的程序语言,称为高级语言。例如VB,C++,C#,Java等,大家都挺熟悉的。
但是计算机不能直接理解这些高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成低级语言,计算机才能执行高级语言编写的程序。翻译的方式有两种,一个是编译,一个是解释。
编译程序
编译过程,是将所有的源代码指令一次性翻译成目标程序,然后再执行。这个过程如下:
编译器将高级语言从源代码翻译成与之等价的目标程序(一次性全部翻译完),在随后的某个时刻,用户启动目标程序由操作系统执行。
编译程序详细过程:
编译器首先对源程序进行词法,语法,语义的分析,将源程序变成一种内部表达形式,叫做中间代码,中间代码是一种结构简单,表意明确的记号系统,能容易的将他翻译成目标代码。
目标代码分为两类:汇编语言形式和机器指令形式。
解释程序
解释过程,就是对于源文件中的每一条指令,都依次翻译成目标指令(这是和编译不同的,解释程序没有目标程序),并且执行的过程。对每条这种执行过程完全由解释器控制的。
解释程序在词法,语法,语义分析上和编译器的工作原理基本相同,但在运行用户程序时,直接执行源程序或源程序的中间代码程序,中间不会产生目标程序,如下图三种方式(C更接近于机器语言)。
编译和解释的比较
编译:一次编译,多次运行,总体运行较快,效率更高。
平台依赖性。编译好的程序只能在当前平台运行,是个局限性。
解释:解释器实时地解释每一条指令并运行,总体运行比较慢。
平台无关性。任何平台只要装上解释器都可以运行完全相同的代码。
发展
编译和解析相比汇编更加效率,人为理解更加容易,但是编译和解释的优缺点明显,而且还是互补的,有没有更有效率又可移植的编程呢,当然是有的,C#和Java,大家都很熟悉。
它们是如何解释的,简单一句话说明吧:
JAVA:先转换为中间语言,然后在运行时!解释!
C#:先转换为中间语言,然后在运行时!编译!,且用到多少就编译多少!