编译和解释的区别
4 分钟阅读
•
786 字
+
343 词
编译执行
:是指程序在执行之前,首先
通过编译器将源代码编译为机器代码,然后直接在 CPU 上运行
。常见的编译语言如C、C++
优点:编译后的
程序运行速度快
,因为
机器代码是针对目标平台直接生成的,且不需要在运行时再进行翻译
。并且编译器通常会进行指令重排优化代码。
缺点:程序必须针对每个平台重新编译,
跨平台性差
;另外,编译后生成的机器代码难以调试和逆向工程。
解释执行
:解释执行是指源代码不经过编译器的预先编译,而是在运行时通过解释器逐行翻译并执行。常见的解释语言如Python、 Ruby.
优点:
跨平台性好
,因为代码在每个平台上都是通过相应平台的解释器来运行的,且开发周期更短。
缺点:
运行速度较慢
,因为每次执行时都需要
进行动态翻译和解释
。
JVM 采用编译执行和解释执行相结合的方式:
解释执行:JVM 会逐行解释执行字节码,尤其是程序初次运行时,这种方式有助于程序的跨平台性。即时编译(JIT):JVM 引入了即时编译器(Just-In-Time Compiler),在程序运行时将热代码(经常执行的代码)编译为本地机器码,避免反复解释,提升性能。因此,JVM 实际上是混合使用解释执行和编译执行。
编译器(将
高级语言或汇编语言的代码转换成机器认识的代码
)
解释器定义:机器不能理解我们用高级语言编写的代码,所以要在程序执行前将高级语言“翻译”为机器语言。
这是一个将源语言程序转化为目标语言程序的过程,它依靠翻译程序来完成。
编译器
:将
编译型语言(C++,Go)翻译为机器语言
。(工作效率高,即时间快、空间省;交互性与动态性差,可移植性差)
解释器
:将解释型语言(JavaScript、
Python
)翻译为机器语言。(工作效率低,即时间慢、空间费;交互性与动态性好,可移植性好)
编译与解释的比较
(1)
编译程序会产生目标程序
;而
解释程序不产生目标程序
;
(2)编译程序实现起来比较复杂;而解释程序本身实现起来比较简单;
(3)编译程序效率比较高;而
解释程序运行效率比较低,需对语法、词法、语义等进行检测;
编译是将源代码经过分析后生成语法树,再
优化生成中间代码(指令重排)
,最后
生成机器码
。编译的结果是
生成一个可执行的二进制文件
;
而解释也是将源代码经过分析后生成语法树,只不过此后它是基于语法树
生成字节码
,再根据
字节码去执行程序。它并不会生成目标文件,更多的是一个结果。