当前位置: 首页 > news >正文

编译器基础概念

文章目录

  • 编译器与解释器
  • 解释器 vs 编译器对比
    • 编译方式
      • Just-In-Time (JIT) 编译
      • Ahead-Of-Time (AOT) 编译
      • JIT(即时编译)与 AOT(提前编译)对比
      • 什么时候用到JIT什么时候用到AOT?
    • Pass 和 IR
      • Pass
  • 传统编译器
    • 编译器的发展历史(History of Compiler)
    • GCC 编译过程与原理(GCC Process and Principle)
    • LLVM/Clang 编译过程与原理(LLVM/Clang Process and Principle)
  • AI 编译器
    • AI 编译器的发展历史(History of AI Compiler)
    • AI 编译器的通用架构(Base Common Architecture)
  • 参考

编译器与解释器

解释器 vs 编译器对比

特性解释器 (Interpreter)编译器 (Compiler)
输入处理每次读取一行整个程序一次性处理
输出不生成中间代码生成中间目标代码(如 .obj.class
工作机制编译和执行同时进行先完成全部编译,再执行
存储不保存机器代码存储编译后的机器代码(如 .exe
执行方式解释过程即执行,逐行运行执行与编译分离,运行编译后的独立程序
程序生成无输出程序,每次执行需重新解释源码生成可独立运行的程序(如 .exe
代码修改直接修改源码即可运行需重新编译修改后的源码
运行速度慢(逐行解释)快(直接执行机器码)
内存占用较少(无中间代码)较多(需存储目标代码)
错误处理逐行显示错误,需纠正后继续解释下一行编译时显示所有错误,必须修正才能生成可执行程序
错误监测容易(实时反馈)需完整编译后反馈
适用语言PHP、Perl、Python、RubyC、C++、C#、Scala、Java
典型步骤1. 创建代码
2. 直接解释执行
1. 创建代码
2. 语法分析
3. 生成机器码
4. 链接运行

编译方式

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

  • 静态编译:程序在执行前全部被编译为机器码,称为AOT(Aheadof time),即“提前编译"
  • 动态解释:程序边编译边运行,通常将这种类型称为 JIT(Just in time)即“即时编译";

Just-In-Time (JIT) 编译

  • 运行时将代码编译为机器码,适用于动态语言,具有更高的运行时优化能力。

Ahead-Of-Time (AOT) 编译

  • 在程序运行前将代码编译为目标机器码,启动速度快,适合静态语言。

JIT(即时编译)与 AOT(提前编译)对比

特性JIT(Just in Time)即时编译AOT(Ahead of Time)提前编译
优点
硬件适配优化✅ 根据当前硬件实时生成最优机器指令❌ 无法针对运行环境动态优化
运行时优化✅ 根据程序实际运行情况优化指令序列❌ 静态优化,无法利用运行时信息
动态链接支持✅ 唯一支持动态链接的方案❌ 无法支持动态链接
内存利用率✅ 可基于进程内存实际情况调整代码❌ 内存分配固定
缺点
运行时性能消耗❌ 编译占用运行时间,可能导致卡顿✅ 无运行时编译开销
优化限制❌ 需权衡编译时间和优化程度✅ 可进行充分静态优化
启动性能❌ 初始编译无法立即达到最高性能✅ 启动即达峰值性能
程序启动速度❌ 初始编译影响启动速度✅ 显著加快程序启动
安装/部署影响✅ 无额外安装时间❌ 增加程序安装时间
语言一致性✅ 保持高级语言特性❌ 可能牺牲语言一致性
存储占用✅ 不保存编译结果❌ 预编译内容占用额外存储空间
典型应用场景Java/JVM、JavaScript引擎、动态语言环境C/C++程序、系统级开发、移动端应用

什么时候用到JIT什么时候用到AOT?

选 JIT 当:

  • 需要动态优化、跨平台或快速开发迭代。
  • 允许牺牲部分启动时间换取长期性能(如服务端应用)。

选 AOT 当:

  • 要求快速启动、资源受限或需静态分发(如移动端 APP)。
  • 代码稳定且无需运行时调整(如系统级软件)。

Pass 和 IR

  • Pass:编译器的一个处理阶段,用于分析和优化程序。
  • IR(Intermediate Representation):中间表示,是源代码与目标代码之间的抽象形式,方便分析与优化。

Pass


传统编译器

编译器的发展历史(History of Compiler)

  • 早期编译器将高级语言翻译成机器代码
  • 随着程序复杂度增加,出现多阶段、可优化的编译器设计

GCC 编译过程与原理(GCC Process and Principle)

  • 预处理(Preprocessing)
  • 编译(Compilation)
  • 汇编(Assembly)
  • 链接(Linking)
  • 支持多平台和多种优化选项

LLVM/Clang 编译过程与原理(LLVM/Clang Process and Principle)

  • 模块化设计,前端(Clang)、中端(LLVM IR)、后端(目标代码生成)分离
  • 易于扩展和优化
  • 广泛用于研究与工业界

AI 编译器

AI 编译器的发展历史(History of AI Compiler)

  • 初期尝试使用启发式方法优化编译过程
  • 随着机器学习的发展,逐渐应用神经网络和强化学习进行自动优化

AI 编译器的通用架构(Base Common Architecture)

  1. 前端:将源代码转为 IR
  2. IR 优化器:使用 AI 方法预测最优优化策略
  3. 后端生成器:将优化后的 IR 转为机器码
  4. 反馈环节:通过运行数据训练模型,持续优化编译效果

参考

  • 编译器和解释器啥区别?AOT和JIT啥区别?Pass和IR又是什么?【AI编译器】系列01篇
  • 编译器基础介绍

相关文章:

  • 【MPC】模型预测控制笔记 (2):约束MPC
  • HTML+CSS实现的动态登录界面
  • 【技术追踪】用于 CBCT 到 CT 合成的纹理保持扩散模型(MIA-2025)
  • 车载以太网-switch
  • python精讲之文件操作
  • 晶振常见封装工艺及其特点
  • 《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
  • Python脚本开发入门:从基础到进阶技巧
  • 印度客机坠毁致波音美股盘前直线下跌​
  • python中的zip函数
  • Java集合 - ArrayList底层源码解析
  • C++标准库大全(STL)
  • jupyter内核崩溃
  • 第四章 指令系统
  • 强化学习 PPO
  • 红帽认证工程师(RHCE):掌握Linux自动化的关键
  • Python Day50 学习(仍为日志Day19的内容复习)
  • 全链路实时感知:网络专线端到端监控运维
  • 1万美元iO bounty破解之旅
  • 《Deep Residual Learning for Image Recognition》(深度残差学习在图像识别中的应用)
  • 网站建设制作设计公司佛山/淘宝推广软件哪个好
  • wordpress 网站 注册/如何免费注册网站平台
  • 网站开发应该怎么做/网络营销的策划流程
  • 网站优化怎么做效果才好/网站seo课设
  • 北京网站建设企业网站制作/优化培训学校
  • 龙岗网站建设设计服务/注册域名查询网站官网