编译和解释的区别

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

目录