编译器与解释器

1. Compiler VS Interpreter

编译器(Compiler)和解释器(Interpreter)是编程语言实现中的两种核心工具。

它们的核心目标都是将人类可读的源代码转换为计算机可执行的指令,但工作方式和应用场景有显著区别。

解释器编译器
程序步骤1.创建代码
2.没有文件链接或机器代码生成
3.源语句在执行过程中逐行执行
1.创建代码
2.将解析或分析所有语言语句的正确性
3.将把源代码转换为机器码
4.链接到可运行程序
5.运行程序
输入每次读取一行整个程序
输出不产生任何的中间代码生成中间目标代码
工作机制编译和执行同时进行编译在执行之前完成
存储不保存任何机器代码存储编译后的机器代码在机器上
执行程序执行是解释过程的一部分,
因此是逐行执行的
程序执行与编译是分开的,
它只在整个输出程序编译后执行
生成程序不生成输出程序,
所以它们在每次执行过程中都要评估源程序
生成可用独立于原始程序运行的输出程序
修改直接修改就可运行如果需要修改代码,则需要修改源代码,重新编译
运行速度
内存它需要较少的内存,因为它不创建中间对象代码内存需求更多的是由于目标代码的创建
错误解释器读取一条语句并显式错误编译器在编译时显式所有错误和警告
错误监测容易
编程语言PHP、Ruby、PythonC、C++、C#、Java

2. JIT和AOT编译方式

程序主要有两种运行方式:

  • 静态编译:程序在执行前全部被编译为机器码,称为AOT(Ahead Of Time),即”提前编译”;
  • 动态解释:程序边编译边运行,通常将这种类型称为JIT(Just In Time) ,即”即使编译”;
JIT

AOT

Just In TimeAhead Of Time
优点1. 可用根据当前硬件情况实时编译生成最优机器指令
2. 可以根据当前程序的运行情况生成最优的机器指令序列
3. 当程序需要支持动态链接时,只能使用JIT
4. 可以根据进程中内存的实际情况调整代码,使内存能够更充分的利用
1. 在程序运行前编译,可以避免在运行时的编译性能消耗和内存消耗

2. 可以在程序运行初期就达到最高性能

3. 可以显著的加跨程序的启动
缺点1. 编译需要占用运行时资源,会导致进程卡顿
2. 编译占用运行时间,对某些代码编译优化不能完成支持,需在流畅和时间权衡
3. 在编译准备和识别频繁使用的方法需要占用时间,初始编译不能达到最高性能
1. 在程序运行前编译会使程序安装的时间增加

2. 牺牲高级语言的一致性问题

3. 将提前编译的内容保存会占用更多的
总结:

编译器主要为程序设计语言提供服务,将各种程序设计语言进行处理翻译成我们底层的计算机语能够理解并执行的指令。

解释器是另一种语言处理器,它是通过对高级编程语言进行逐行解析来使机器理解并执行相应动作,边解析边执行。

订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部