也谈编译 VS 解释

时间:2022-10-05 14:56:13

语言发展

 

  计算机的硬件只能识别01组成的机器指令,而机器指令是最基本的计算机语言,但是我们平时进行程序设计时肯定不会用机器语言来编程,因为用它的效率低,更让人难以理解。因此聪明的人类发明了汇编语言,它使用符号来表示指令,例如用ADD表示加法,这就容易理解了。但是汇编语言和机器语言十分接近,其书写取决于机器指令,因此它还是一种面向机器的语言,所以称它为低级语言。相应的,又在此基础上,开发出了功能更强、抽象更高的面向各类应用的程序语言,称为高级语言。例如VB,C++,C#,Java等,大家都挺熟悉的。

  但是计算机不能直接理解这些高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成低级语言,计算机才能执行高级语言编写的程序。翻译的方式有两种,一个是编译,一个是解释

 

编译程序

 

  编译过程,是将所有的源代码指令一次性翻译成目标程序,然后再执行。这个过程如下:

  编译器将高级语言从源代码翻译成与之等价的目标程序(一次性全部翻译完),在随后的某个时刻,用户启动目标程序由操作系统执行。

  也谈编译 VS 解释

  编译程序详细过程:

  编译器首先对源程序进行词法,语法,语义的分析,将源程序变成一种内部表达形式,叫做中间代码,中间代码是一种结构简单,表意明确的记号系统,能容易的将他翻译成目标代码。

  目标代码分为两类:汇编语言形式和机器指令形式。

  也谈编译 VS 解释

解释程序


  解释过程,就是对于源文件中的每一条指令,都依次翻译成目标指令(这是和编译不同的,解释程序没有目标程序),并且执行的过程。对每条这种执行过程完全由解释器控制的。

  也谈编译 VS 解释

  解释程序在词法,语法,语义分析上和编译器的工作原理基本相同,但在运行用户程序时,直接执行源程序或源程序的中间代码程序,中间不会产生目标程序,如下图三种方式(C更接近于机器语言)。

  也谈编译 VS 解释

编译和解释的比较


编译:一次编译,多次运行,总体运行较快,效率更高。

平台依赖性。编译好的程序只能在当前平台运行,是个局限性。

举一个英语翻译的例子:编译过程就是把一遍英文文章全部翻译成中文,然后全部记录在纸上,当我们下次再读这篇英文文章时,直接读已经翻译好的中文文章就行了,速度很快。但是比较依赖这张中文纸。

解释:解释器实时地解释每一条指令并运行,总体运行比较慢。

平台无关性。任何平台只要装上解释器都可以运行完全相同的代码。

还用英语翻译的例子:解释过程就是没读一个句子就翻译一个句子,下次再读这篇英文文章是,还需要读一读翻译一句,时间慢,效率低,但是这种方法不需要依赖所谓的中文纸。

 

发展


  编译和解析相比汇编更加效率,人为理解更加容易,但是编译和解释的优缺点明显,而且还是互补的,有没有更有效率又可移植的编程呢,当然是有的,C#Java,大家都很熟悉。

  它们是如何解释的,简单一句话说明吧:

  JAVA:先转换为中间语言,然后在运行时!解释!

  C#:先转换为中间语言,然后在运行时!编译!,且用到多少就编译多少!