编译器和解释器
最后更新于:2022-04-02 04:07:36
[TOC]
## 编译器
什么是编译器
```
源程序 -> 编译器 -> 目标程序
```
什么是程序
```
输入 -> 程序 ->输出
```
## 解释器
如:早起的 javascript
```
源程序
->解释器->输出
输入
```
- 解释器同时接受源程序和输入,执行并返回输岀
## 混合编译器
如:之前的java
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a9/8b/a98be6171c1e7b485090f411da493554_774x364.png)
- 中间代码更容易被翻译成目标程序、优化空间更大
- 中间语言的存在更利于编译器的实现
- 让虚拟机处理复杂的执行环境(跨平台)
## 即时编译器-JIT (Just-in- time compiler)
- 种提高效率的方法,中间代码不是直接执行,而是先被编译成机器码再执行
- 例如:(现在的)Java的一个类型的字节码第一次执行时被编译成了机器码,第二次执行的时候不需要再编译。
- 优点:提高执行效率(50%以上)
## 交叉编译
- 在一个平台编译产生多个平台的可执行代码
## 不同方式优劣势
- 解释执行有性能问题,但也异常灵活,例如支持eval函数,意味着程序可以动态修改
- 直接交叉编译技术难度是其次,跨平台问题会多;一次编译很多包也有分发问题—产品问题。
- 虚拟化技术提供了更好的体验,却没有提供更好的性能(JT完美解决这一点)
';