编译 && 链接
iOS开发中编译链接过程:
- 预处理 (Prepressing)
- 静态语法检测 生成AST(Analyze Static)
- 编译 (Compilation)
- 汇编 (Assembly)
- 链接 (Linking)
写好代码后, LLVM 会预处理代码,比如把宏嵌入到对应的位置; 预处理完成后, LLVM 会对代码进行词法分析和语法分析,生成 AST , AST 是抽象语法树,结构上比代码更精简,遍历起来更快,所以使用 AST 能够快速的进行静态检查,同时还能更快地生成生成 IR (中间表示) 最后 AST 会生成 IR, IR 是一种更近机器码的语言区别在于和平台无关,通过 IR 可以生成多分适合不同平台的机器码。对于iOS系统,IR 生成的可执行文件就是 Mach-O.
预处理 ------ 静态语法检测 ------ AST抽象语法树 ------ IR -----
链接器
链接器最主要的作用,就是将符号绑定到地址上。
编译器
为什么 iOS代码快?
iOS 编写的代码是先使用编译器把代码编译成机器码(OC --> C/C++ --> 机器码),然后直接在 CPU 上执行机器码的。
Python 编写的代码,是程序在CPU运行时,用解释器获取源码 直接生成指令,中间不会产生另一种代码。