LLVM概念
LLVM是构架编译器(
compiler
)的框架系统,以C++
编写而成,用于优化任意程序语言编写的程序的编译时间(compile-time
)、链接时间(link-time
)、运行时间(run-time
)以及空闲时间(idle-time
)。对开发者保持开放,并兼容已有脚本
##传统编译器设计
####编译器前端(Frontend)
编译器前端
的任务是解析源代码
(编译阶段),它会进行 词法分析
、语法分析
、语义分析
、检查源代码是否存在错误,然后构建抽象语法树(Abstract Syntax Tree AST)
,LLVM的前端还会生成中间代码(intermediate representation,简称IR)
,可以理解为llvm是编译器 + 优化器
, 接收的是IR中间代码
,输出的还是IR
,给后端,经过后端翻译成目标指令集
#####优化器 Optimizer
优化器负责进行各种优化,改善代码的运行时间,例如消除冗余计算等
####后端 Backend(代码生成器 Code Generator)
将代码映射到目标指令集,生成机器代码,并且进行机器代码相关的代码优化
##iOS的编译器架构
OC、C、C++
使用的编译器前端是Clang
,Swift
是swift
,后端都是LLVM