CocoaPods 研究
iOS编译过程的原理和应用
前言
一般可以将编程语言分为两种,编译语言和直译式语言。
Clang+LLVM
iOS开发中合理利用Xcode和编译
- attribute
- Clang警告处理
- 插入编译期脚本
- 提高项目编译速度
iOS编译
Objective C采用Clang作为前端,而Swift则采用swift()作为前端,二者都以LLVM(Low level vritual)
Clang -> LLVM Optimizer -> LLVM Code Generator
编译器前端
编译器前端的任务是进行:语法分析,语义分析,生成中间代码(intermediate representation).在这个过程中,会进行类型检查,如果发现错误或者警告会标注出是在哪一行
英文|中文
|
Lexical Analysis|语法分析
Driver|驱动
Parser|语法解析
Indexing| |
Semantic Analysls| 语义分析
Code Completion||
Abstract Syntax Tress(AST)| 抽象语法树
Rewriter||
static Analyzer||
Tooling||
编译器后端
编译器后端会进行机器相关的代码优化,生成机器语言。
- LVVM优化器会进行BitCode的生成,链接期优化等等。
|英文| 中文|
|
Code Generator||
Machine Code||
Object Files||
just-In-Time Compiler||
arm64||
armv7||
x86_64||
i368||
dYSM是一个函数对应表的文件
attribute
attribute 是一个高级的编译器指令,它允许开发者指定更多的编译检查和一些高级的编译期优化。
分为三种:
- 函数属性(Function Attribute)













网友评论