编译器 vs 解释器

编译器 vs 解释器

编译器 vs 解释器

Compiler 编译器 Interpreter 解释器
功能 整个程序进行分析,执行输出为另一种代码(一般为机器码,如目标代码,可能需要连接后才能执行),但是不执行该机器码 源代码逐行执行,即包含分析和执行两步
编程步骤 1、创建程序。
2、【编译】解析或分析所有代码的正确性。如果不正确,则抛出错误如果没有错误,编译器会将源代码转换为机器代码
3、它将不同的代码文件链接到一个可运行的程序(如 .exe)
4、 运行程序
1、创建程序
2、逐行执行源语句
执行速度 每次执行的是可运行程序(如 .exe),执行速度较 每次执行都从源代码开始,且不保存执行过程中的机器代码,执行速度慢
执行者权限 执行者一般得到的是可执行文件,无法对源代码进行操作,执行者无法对程序进行更改 执行者可以对源程序进行更改
程序运行对象 CPU 解释器
适用环境 .exe 限定特定CPU| 一份源代码只要有对应版本解释器即可运行<br />对于web环境`,由于代码往往是一部分一部分加载,因此无需对整个程序进行分析,采用逐行编译运行的解释型语言更适合
代码优化 对整个代码进行复杂地分析优化,耗时较长,优化效果较好 逐行查看,分析和处理耗时较短优化效果较差
有错代码的执行 只要有错误,代码就不能执行 执行到有错误代码位置
对应语言举例 C,C ++,C#,Scala,Java(既需要编译,又需要解释) PHP,Perl,Ruby (一般可以认为,不需要编译器,直接通过解释器执行的语言就是脚本语言

附加注意事项:

  • 解释和编译都只是程序从源码到运行时的一种动作,高级语言运行过程中动作其实很多,有的是编译动作,有的是解释动作,用解释型或者编译型来分类一个语言,不完全合理。
  • 一个完整的编译系统与 一个用C编写的程序hello.c的编译过程:

编译器 vs 解释器


参考文献

https://www.zhihu.com/question/268303059 深入理解两个概念
https://blog.csdn.net/zhu_xun/article/details/16921413 c的执行过程
https://www.guru99.com/difference-compiler-vs-interpreter.html 编译器和解释器的区别