Swift历史
- 历时5年发展,从Swift1.x发展到了Swift5.x版本,经历了多次重大改变,ABI终于稳定
- API(Application Programming Interface):应用程序编程接口: 源代码和库之间的接口
- ABI(Application Binary Interface):应用程序二进制接口:
- 应用程序与操作系统之间的底层接口
- 涉及的内容有:目标文件格式、数据类型的大小\布局\对齐、函数调用约定等等
- 随着ABI的稳定,Swift语法基本不会再有太大的变动,此时正是学习Swift的最佳时刻
- 截止至2019年6月,目前最新版本:Swift5.1
- Swift完全开源: https://github.com/apple/swift,主要采用C++编写
-------------------------------------------------------------------------------------------------------------------------------
Swift编译流程
首先我们要知道编译器分为前端和后端:
前端:词法分析
后端:生成对应平台的二进制代码
Swift与OC和C的编译流程区别:C和OC编译器的前端是Clang,也就是以前的OC代码通过Clang这个编译器的前端进行处理,转交给LLVM这个编译器的后端,最后生成ARM的二进制代码。而Swift的编译器的前端是swiftc,通过swiftc进行词法分析和语法树处理,然后交给LLVM的后端编译器,最后生成ARM格式的二进制代码。
具体的编译流程:
Swift代码-->通过swiftc生成Swift AST(Swift语法树)-->Raw Swift IL(Swift特有的中间代码)-->Canonical Swift IL(更简洁的Swift代码)-->转交给后端生成LLVM代码-->Assembly(汇编代码)-->Executable(二进制代码)。
-------------------------------------------------------------------------------------------------------------------------------
Swiftc
- swiftc存放在Xcode内部pContents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
- 一些操作
- 生成语法树: 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
- 对汇编代码进行分析,可以真正掌握编程语言的本质