Swift历史
- 历时5年发展,从Swift1.x发展到了Swift5.x版本,经历了多次重大改变,ABI终于稳定。
- API(Application Programming Interface):应用程序编程接口: 源代码和库之间的接口
- ABI(Application Binary Interface):应用程序二进制接口:
- 应用程序与操作系统之间的底层接口
- 涉及的内容有:目标文件格式、数据类型的大小\布局\对齐、函数调用约定等等
- Swift完全开源: github.com/apple/swift… 主要采用C++编写
Swift编译流程
- 前端:词法分析
- 后端:生成对应平台的二进制代码
Swift与OC和C的编译流程区别:C和OC编译器的前端是Clang,也就是以前的OC代码通过Clang这个编译器的前端进行处理,转交给LLVM这个编译器的后端,最后生成ARM的二进制代码。而Swift的编译器的前端是swiftc,通过swiftc进行词法分析和语法树处理,然后交给LLVM的后端编译器,最后生成ARM格式的二进制代码。 具体流程为:
Swiftc
1、swiftc存放在Xcode内部:
应用程序/XCode/显示包内容/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
2、一些操作
生成语法树: swiftc -dump-ast main.swift
生成最简洁的SIL代码:swiftc -emit-sil main.swift
生成LLVM IR代码: swiftc -emit-ir main.swift -o main.ll
生成汇编代码: swiftc -emit-assembly main.swift -o main.s
对汇编代码进行分析,可以真正掌握编程语言的本质