编译器(Compiler)
编译器
是一种计算机程序,负责把一种编程语言编写的源码转换成另外一种计算机代码
,往往是二进制
的形式存在,被称为目标代码(object code)
。这个转换的过程通常的目的是生成可执行的程序。
编译器
的产出是另外一种代码
,然后这些代码等着被别人拿来执行,如果还不能直接被执行,那么还需要再编译或解释一遍,再交由计算机硬件执行。
编译器
往往是在「执行」之前完成,产出是一种可执行或需要再编译或者解释的代码
。
### 解释器(Interpreter) 在计算机科学中,`解释器`是一种计算机程序,它直接执行由编程语言或脚本语言编写的代码,并不会把源代码预编译成机器码。 一个解释器,通常会用以下的姿势来执行程序代码: - 分析源代码,并且直接执行。 - 把源代码翻译成相对更加高效率的中间码,然后立即执行它。 - 执行由解释器内部的编译器预编译后保存的代码 - 可以把解释器看成一个黑盒子,我们输入源码,它就会实时返回结果。 不同类型的解释器,黑盒子里面的构造不一样,有些还会集成编译器,缓存编译结果,用来提高执行效率(例如 Chrome V8 也是这么做的)。 解释器通常是工作在「运行时」,并且对于我们输入的源码,是一行一行的解释然后执行,然后返回结果。
### 编译器(Compiler) vs 解释器(Interpreter)
| Compiler 编译器 | Interpreter 解释器
——- | ——- | ——-
功能 | 对整个程序进行分析,执行输出为另一种代码(一般为机器码,如目标代码,可能需要连接后才能执行),但是不执行该机器码 | 对源代码逐行执行,即包含分析和执行两步
编程步骤 | 1、创建程序。
2、【编译】:解析或分析所有代码的正确性。如果不正确,则抛出错误如果没有错误,编译器会将源代码转换为机器代码。
3、它将不同的代码文件链接到一个可运行的程序(如 .exe) 4、 运行程序 | 1、创建程序
2、逐行执行源语句
优点 | 每次执行的是可运行程序,执行速度较快 | 更容易使用,特别是对于初学者
缺点 | 只能通过修改源代码改变程序 | 只能在有解释器的计算机上执行
执行速度 | 每次执行的是可运行程序,执行速度较快 | 每次执行都从源代码开始,且不保存执行过程中的机器代码,执行速度慢
执行者权限 | 执行者一般得到的是可执行文件,执行者无法对程序进行更改 | 执行者可以对源程序进行更改
程序运行对象 | CPU | 解释器
适用环境 | .exe 限定特定CPU| 一份源代码只要有对应版本解释器即可运行
对于web环境`,由于代码往往是一部分一部分加载,因此无需对整个程序进行分析,采用逐行编译运行的解释型语言更适合 |
代码优化 | 对整个代码进行复杂地分析优化,耗时较长,优化效果较好 | 逐行查看,分析和处理耗时较短,优化效果较差
错误 | 编译之后显示所有错误 | 执行到有错误代码位置
对应语言举例 | C,C ++,C#,Scala,Java(既需要编译,又需要解释) | PHP,Perl,Ruby (一般可以认为,不需要编译器,直接通过解释器执行的语言就是脚本语言)
参考 https://www.guru99.com/difference-compiler-vs-interpreter.html