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