编译执行和解释执行的区别

编译执行和解释执行的区别

A、解释程序   

所谓解释程序是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语 翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条命令或语句,解释程序 就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。

这的确是很方便的,很适合于一些小型机的计算问题。但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。


B、编译程序

这是一类很重要的语言处理程序,它把高级语言(如FORTRAN、COBOL、Pascal、C等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结果。

编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。为了完成这些分析综 合任务,编译程序采用对源程序进行多次扫描的办法,每次扫描集中完成一项或几项任务,也有一项任务分散到几次扫描去完成的。

值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。

在实际应用中,对于需要经常使用的有大量计算的大型题目,采用执行速度较快的编译型的高级语言较好,虽然编译过程本身较为复杂,但一旦形成目标文件,以后 可多次使用。相反,对于小型题目或计算简单不太费机时的题目,则多选用解释型的会话式高级语言,如BASIC,这样可以大大缩短编程及调试的时间。

转自:http://blog.csdn.net/ryan_j/article/details/5906124

=======================================
以下来自另一文
=======================================

很惭愧,学了那么多年,还对这两个最基础的概念理解不准确,遂上网查阅,看到有人说的很有意思,发的感慨也颇为实际:

编程语言,是程序员们操控电脑以实现各种功能的主要方式,而解释执行与编译执行,是计算机编程语言的两种执行方式。

所谓解释执行,就好像编程员跟计算机 CPU 之间有个翻译官,编程员发一条指令,翻译官就翻译一条给 CPU。这种语言对编程员而言相对简单,但效率较低;

编译执行有所不同,编程员必须将所有指令按一定规范写成作文一般的形式,再利用编译器一次性翻译为 CPU 直接可以理解的形式并作为一个整体运行。
这种语言对编程员要求更高,但一旦经过编译,效率比解释执行方式高很多。

今天讲这个并不是为了介绍计算机编程的基础知识,而是为了说明一种有趣的现象:为什么同一行业的人,有的人眼高手低,纸上谈兵;有的人却能融会贯通,举一 反三?也许其中的差别正是在于“执行方式”。有的人喜欢相对简单的解释执行方式,他们做事,每个步骤都是清清楚楚的,别人看起来也明白,但一旦进入工程性 强的领域,其效率就无法满足要求。因此,习惯于这类执行方式的人充其量只能做个教练员,可以帮人纠错,却无法胜任工程实践。另一方面,那些喜欢编译执行的 人就不同,因为他们的工作流程经过了类似编译的过程,别人未必能看清他们的行事逻辑,有时甚至觉得他们的做法不合逻辑,但结果却发现他们做事更高效,更具 创造性。

这些现象似乎说明了一个问题:有内在逻辑事情未必是以人们容易理解的方式运作的。

作为一个读书人,我不得不承认自己的思维和行动更多地处于某种类似解释执行的模式;但我也相信,未来工作中的挑战必定会让我获得更多编译执行的训练,让我的工作更有效率。

这里说的很有道理,好像在说我自己一般,大概也是在说大多数工作起来总是陷入死循环、死套路的人们。

Matlab是一种解释运行的程序设计语言,它的代码是在运行时被解释执行的。而用那些诸如C、Fortran等语言编写的程序具有更快的运行速度,是因 为它们首先要被编译为机器码。实时解释型语言的优点是具有更强的平台无关性,更强的语言灵活性和更简便的调试方式;缺点是速度更慢,需要更多的额外开销, 在系统底层控制能力方面收到限制。

转自:http://blog.sina.com.cn/s/blog_77b3b5130100xwgo.html

你可能感兴趣的:(其他)