编译器、解释器定义(将高级语言或汇编语言的代码转换成机器认识的代码)
机器不能理解我们用高级语言编写的代码,所以要在程序执行前将高级语言“翻译”为机器语言。这是一个将源语言程序转化为目标语言程序的过程,它依靠翻译程序来完成。
编译器:将编译型语言(C++,Go)翻译为机器语言。(工作效率高,即时间快、空间省;交互性与动态性差,可移植性差) 解释器:将解释型语言(JavaScript、Python)翻译为机器语言。(工作效率低,即时间慢、空间费;交互性与动态性好,可移植性好)编译与解释的比较 (1)编译程序会产生目标程序;而解释程序不产生目标程序; (2)编译程序实现起来比较复杂;而解释程序本身实现起来比较简单; (3)编译程序效率比较高;而解释程序运行效率比较低,需对语法、词法、语义等进行检测; 编译是将源代码经过分析后生成语法树,再优化生成中间代码,最后生成机器码。编译的结果是生成一个可执行的二进制文件; 而解释也是将源代码经过分析后生成语法树,只不过此后它是基于语法树生成字节码,再根据字节码去执行程序。它并不会生成目标文件,更多的是一个结果。解释型语言和编译型语言
相同之处:都需要转换成二进制才能执行。
不同之处:
1、运行的时候是否需要编译器
编译型语言运行的是最终的二进制代码了,所以不再需要编译器;但是解释型语言边解释、边运行,所以运行时候还有部分代码没有解释好举个例子:在浏览器里,要看 html 效果,要通过带有内置编译工具的软件去查看(如:浏览器或者模拟浏览器的工具)。
2、执行速度
毫无疑问边翻译边执行的解释型语言的速度会比编译型语言运行速度要慢。但是CPU的运行速度如果很快,你可能看不出来,偶尔会看到“有点卡”的效果。
3、可移植性对比
编译型语言运行二进制内容,一旦 CPU 指令改变,之前的二进制文件可能运行不了了。即在其他硬件平台上运行,可能出错,如果想在其他平台运行就需要编译出新的二进制文件,所以编译型语言可移植性差;解释型语言在需要的时候才开始编译、运行,所以具有可移植性,在很多平台都能运行起来。
4、升级上对比
编译型语言的二进制文件如果要升级,需要重新下载一个新的二进制文件了。如QQ的升级,就是要重新下载、安装、覆盖;
而解释型的语言,只要重新写好源代码即可。如网站平台升级,用户只要重新刷新即可。
5、 应用领域
编译型语言应用领域通常是安装软件,如:桌面或手机上安装软件;
解释型的语言的应用领域通常是互联网,网站等,刷新就可以看到最新效果。