LLVM

LLVM / Clang 编译器架构

一、核心思想:LLVM 解决了什么问题?

传统编译器痛点:

一门编程语言如果需要跨平台(Windows / macOS / Linux / ARM / x86),需要为每一套平台单独编写对应的编译工具,前端、优化、后端全部耦合,开发成本极高、复用性极差。

LLVM 解决方案(模块化架构) :

新增一门语言,只需要写一套前端 ,把源码统一编译成 LLVM IR(跨平台中间代码) 。

IR 是平台无关的,无需适配不同系统、不同 CPU,直接复用 LLVM 现成的多平台后端,即可编译出各平台可执行文件。

核心口诀:一次 IR,到处编译

二、LLVM 与 Clang 的准确关系

  • LLVM :是一套通用编译器基础设施 + 架构规范 ,包含 前端规范、IR 中间层、优化器、多平台后端,是底层框架,不是可执行命令。
  • Clang :是严格遵循 LLVM 规范实现的 C/C++/Objective-C 编译器前端命令行工具,是 LLVM 生态的具体落地产物(Xcode 默认编译器)。

三、LLVM 三段式编译架构(重点)

1. 编译器前端(语言相关、平台无关)

职责:识别、解析、校验源代码。

流程:词法分析 → 语法分析(AST)→ 语义检查 → 生成 LLVM IR

特点:只关心编程语言语法,完全不关心运行的 CPU、操作系统。

2. 中间层 LLVM IR(跨平台核心)

IR 是一种平台无关、CPU无关、可优化、可读的中间指令集。

所有语言(C/C++/ObjC/Swift/Rust)都可以统一编译为 IR,再由 LLVM 统一做全局代码优化。

3. 编译器后端(平台相关、硬件相关)

职责:将优化后的 LLVM IR,翻译成对应架构的机器码。

支持 ARM64、x86_64、RISC-V 等主流 CPU,自动适配 macOS、iOS、Linux、Windows 多平台。

四、完整编译链路(ObjC 开发视角)

源代码(.m) → Clang前端 → LLVM IR → LLVM中端优化 → LLVM后端 → 机器码(.o) → 链接成可执行文件

五、新旧架构对比

  • 传统编译器:语言、优化、平台深度耦合,一门语言适配多平台需要多套编译逻辑。
  • LLVM 编译器:模块化解耦,语言前端和硬件后端完全分离,极高复用、易扩展、易优化。

六、极简总结(可直接背诵)

  1. LLVM 是编译器架构框架与规范,提供 IR、优化器、多平台后端;

  2. Clang 是基于 LLVM 规范实现的 C/ObjC 前端编译工具;

  3. 前端负责源码转IR,只懂语言、不懂硬件;

  4. 后端负责IR转机器码,只懂硬件、不懂源码;

  5. 依靠 IR 中间层,实现了 一套前端、全平台运行 的跨平台编译能力。

相关推荐
传奇开心果编程18 分钟前
【Flutter踩坑排雷】第19课:路由硬编码坑|字符串路由书写错误,页面跳转失败排查
android·flutter·ios·移动开发·跨平台·ui框架·声明式ui
茶底世界之下3 小时前
雨后街口的斑马线:用 Awaking 把颜色让给光与步伐
ios·app·产品
茶底世界之下1 天前
晨雾河岸的旧书摊:用 Awaking 给木色一点暖光
ios·app·产品
90后的晨仔1 天前
在 macOS 27 上运行 Xcode 26
ios
茶底世界之下2 天前
山间站台不必转暖:用 Awaking 留住冷光与红箱
ios·app·产品
songgeb3 天前
YYImage Bug:一行之差,正常 JPEG 如何在 iOS 被读成条纹
ios·swift
茶底世界之下3 天前
阴天花摊不必变暖:用 Awaking 留住花色与湿街
ios·app·产品
Fatbobman(东坡肘子)4 天前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
茶底世界之下4 天前
斜光下的旧自行车:用 Awaking 留一版复古胶片色
ios·app·产品