也谈编译 VS 解释

语言发展

 

  计算机的硬件仅仅能识别01组成的机器指令,而机器指令是最主要的计算机语言,可是我们平时进行程序设计时肯定不会用机器语言来编程,由于用它的效率低。更让人难以理解。

因此聪明的人类发明了汇编语言。它使用符号来表示指令,比如用ADD表示加法。这就easy理解了。可是汇编语言和机器语言十分接近,其书写取决于机器指令,因此它还是一种面向机器的语言。所以称它为低级语言。

对应的,又在此基础上,开发出了功能更强、抽象更高的面向各类应用的程序语言。称为高级语言。比如VB,C++,C#,Java等,大家都挺熟悉的。

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

 

编译程序

 

  编译过程,是将全部的源码指令一次性翻译成目标程序,然后再运行。这个步骤例如以下:

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

  

  编译程序具体过程:

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

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

  

解释程序


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

  

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

  

编译和解释的比較


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

平台依赖性。

编译好的程序仅仅能在当前平台执行。是个局限性。

举一个英语翻译的样例:编译过程就是把一遍英文文章所有翻译成中文,然后所有记录在纸上,当我们下次再读这篇英文文章时,直接读已经翻译好的中文文章即可了,速度非常快。

可是比較依赖这张中文纸。

解释:解释器实时地解释每一条指令并执行。整体执行比較慢。

平台无关性。

不论什么平台仅仅要装上解释器都能够执行全然同样的代码。

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

 

发展


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

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

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

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

 



原文地址:https://www.cnblogs.com/yfceshi/p/6785842.html