编译器和解释器

最后更新于: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完美解决这一点)
';