SIL
image.png在底层流程中,OC代码和SWift代码时通过不同的编译器进行编译,然后通过LLVM,生成.o可执行文件,如下所示
Swift编程语言是在LLVM上构建,并且使用LLVM IR和LLVM的后端去生成代码。但是Swift编译器还包含新的高级别的中间语言,称为SIL。SIL会对Swift进行较高级别的语义分析和优化。
SIL
是为了实现swift编程语言而设计的,包含高级语义信息的SSA格式的中间语言.SIL
包含以下功能:
一系列的高级别优化保障,用于对运行时和诊断行为提供可预测的底线
对swift语言数据流分析强制要求,对不满足强制要求的问题产生诊断。例如变量和结构体必须明确初始化,代码可达性即方法return的检测,switch的覆盖率
- 确保高级别优化。包含retain/release优化,动态方法的去虚拟化(devirtualization,不了解虚函数可以查看之前文章static vs dynamic dispatch),闭包内联,内存初始化提升和泛型方法实例 化.
image.png可用于分配"脆弱"内联的稳定分配格式,将Swift库组件的泛型优化为二进制。
我们可以通过swiftc -h终端命令,查看swiftc的所有命令:
swiftc -dump-ast xxx.swift
将某个Swift文件转化生成指定的SIL文件:
swiftc -emit-sil xxx.swift >> ./main.sil && code xxx.sil
这样我们就可以看到一些,中间的语言,从而看清Swift的一些内部操作,便于理解代码执行过程中发生了什么.
大家可以自己测试一下.
网友评论