1. Swift编译简介:
-
iOS开发的语言不管是
OC还是Swift后端都是通过LLVM进行编译的;
如下图所示:
image.png -
OC通过clang编译器,编译成IR, 然后再生成可执行文件.o(这里也就是我们的机器码)
Swift则是通过Swift编译器编译成IR,然后再生成可执行文件.
下面是Swift文件的编译过程:
image.png
-
Swift在编译过程中使用的前端编译器是Swiftc, 和我们之前在OC中使用的Clang还是有所不同的;用swiftc -h查看他能干什么:
image.png
2. SIL(Swift intermediate language)
1. 了解SIL:
SIL参考文档
SIL参考视频:“Swift's High-Level IR: A Case Study..."没字幕..

image.png
- @mail 这里标识我们当前
main.swift的入口函数,SIL中的标识符名称以@作为前缀 - %0, %1...在
SIL也叫寄存器,可以理解为我们日常开发中的常量,一旦赋值之后就不可以在修改,如果SIL中还要继续使用,那么就不断的累加数字.同时这里所说的寄存器时虚拟的,最终运行到我们的机器上,会使用真的寄存器. -
alloc_gobal创建一个全局变量 -
global_addr拿到全局变量的地址,赋值给%3 -
metatype拿到LGTeacher的Metadata赋值给%4 - 将
__allocating_init的函数地址赋值给%5 -
apply调用__allocating_init,并把返回值给%6 - 将%6的值存储到%3
- 构建
Int,并return



