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 中间层,实现了 一套前端、全平台运行 的跨平台编译能力。

相关推荐
zeqinjie1 小时前
Flutter 获取 iPhone Duo 预留区位置
前端·flutter·ios
二流小码农1 小时前
鸿蒙开发:ArrayList,可不会让UI更新哦
android·ios·harmonyos
茶底世界之下6 天前
为什么预览、录制、离线导出不能共享同一个背压策略?
ios·swift
2501_916007476 天前
苹果商店iOS应用上架费用全面解析:开发者计划与审核费用计算
android·ios·小程序·https·uni-app·iphone·webview
2501_916008896 天前
如何实现iOS App代码混淆:SwiftShield使用指南
android·ios·小程序·https·uni-app·iphone·webview
2501_915909066 天前
移动端开发工具链怎么组合比较好,iOS、Android、跨端三套配置方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
2501_916008896 天前
怎么用 Godot 导出 iOS 应用并上架 App Store?签名字段该填什么?
android·ios·小程序·https·uni-app·iphone·webview
2501_915918416 天前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
终端安全笔记7 天前
iOS 27 之后「策略空转」:设备升级不报错,但旧策略不再管它
android·网络·安全·ios·智能手机