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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译执行和解释执行的区别相关的知识,希望对你有一定的参考价值。

编译执行是否必须先执行安装程序,或者把编程语言安在应用程序所在的机器上才能用?而解释执行把应用程序直接拷过去就能用?重装系统后是否编译执行类的语言编的程序就不能用了?程序运行时有什么不同?两者还有什么区别?哪些语言编的程序是编译执行,哪些是解释执行?

一、主体不同

1、编译执行:由编译程序将目标代码一次性编译成目标程序,再由机器运行目标程序。

2、解释执行:将源语言直接作为源程序输入,解释执行解释一句后就提交计算机执行一句,并不形成目标程序。

二、优势不同

1、编译执行:相比解释执行编译执行效率高,占用资源小,适合复杂程序

2、解释执行:开发速度快,出现严重BUG的几率小。


三、缺点不同

1、编译执行:兼容性差,例如在windows平台上写的编译程序一般不可以在unix平台上运行。

2、解释执行:解析需要时间,不生成目标程序而是一句一句的执行的方式会造成计算机资源的浪费,即执行效率低。


参考资料来源:百度百科-解释执行

参考资料来源:百度百科-编译执行

参考技术A A、解释程序

所谓解释程序是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。这的确是很方便的,很适合于一些小型机的计算问题。但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。

B、编译程序

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

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

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

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

    编译(compilation , compile) ,利用编译程序从源语言编写的源程序产生目标程序的过程。用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言。

    解释直译语言由解释器将代码一句一句运行。

    理论上,任何编程语言都可以是编译式,或直译式的。它们之间的区别,仅与程序的应用有关。

解释器和编译器有什么区别和关系?

菜鸟经常将编译器和解释器弄混淆,无奈之下,于是向高手请教。

高手说:

解释器是一条一条的解释执行源语言。比如 php,postscritp,javascript 就是典型的解释性语言。

编译器是把源代码整个编译成目标代码,执行时不在需要编译器,直接在支持目标代码的平台上运行,这样执行效率比解释执行快很多。比如 C 语言代码被编译成二进制代码(exe 程序),在 windows 平台上执行。

菜鸟说:“我还是不明白,能给个形象的比喻么?”

高手说:“给你讲个故事。”

  • 1.壮骨粉和黄金搭档;
  • 2.一家人去看望爸妈;

女儿见到女婿后,就将这张纸上的信息编成短信发给了工作的女婿。女婿一看就明白了,下班后先去超市买了补品,然后开车回家带着妻儿就去看望岳父岳母了。

想到什么了吗?

菜鸟说:

我这样说不知道对不对:儿子就像是解释器,是想到一点做一点。女儿就像编译器,女婿就像平台,女儿听完后,在纸上罗列出所有要做的事情,女婿就按着指示办事了。

高手说:

就是这样的。儿子对于母亲的话是一条一条执行,女儿是将母亲的话整个翻译成平台能理解的目标语言--短信,整个由女婿直接执行。后者的执行效率会更高。从功能上看,解释器和编译器确实不一样。然而,从流程和结构上看,二者却非常相似。儿子和女儿听到母亲的话以后,都是从两个方面来思考:老人的身体和老人对小辈的思念。以此为据,儿子和女儿都做出了自己的决定。只不过一个直接去做了,另一个却将所要做的事情翻译成另一种载体--短信--给存储起来。

解释器和编译器也是如此,读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)。如下图所示:

总之,解析器和编译器它们在功能上是不一样的,然而从结构上看却有诸多相同,而且在开发时也并没有本质上的差别,这也是很多人将二者混淆的原因之一。究竟是开发解析器还是编译器?只需要依据功能上的实际需要来做出决定就ok了。

解释器和编译器有什么区别和关系?


往期精彩回顾


点击左下角阅读原文查看历史经典技术问题汇总,看完顺手三连呀~

以上是关于编译执行和解释执行的区别的主要内容,如果未能解决你的问题,请参考以下文章

解释器和编译器的区别

编译型语言和解释型语言的区别

解释器和编译器有什么区别和关系?

编译和解释的区别

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

编译和解释的区别