- 学习环境
下面所讲的是基于Swift5.1
开发工具:Xcode11
操作系统:macOS 10.14 Mojave、macOS Catalina 10.15
Xcode下载地址:https://developer.apple.com/download/more/
- 课程大纲
- Swift简介
Swift是Apple在2014年6月WWDC发布的全新编程语言,中文名和LOGO是“雨燕”
Swift之父Chris Lattner pClang编译器作者、LLVM项目的主要发起人 p从Apple离职后,先后跳槽到Tesla、Google p目前在Google Brain从事AI研究
- 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++编写
- 编译流程
什么是LLVM?
LLVM是构架编译器(compiler)的框架系统,以C++编写⽽成,⽤于优化以任意程序语⾔编写的程序的编译时间 (compile-time)、链接时间(link-time)、运⾏时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有 脚本。 LLVM计划启动于2000年,最初由美国UIUC⼤学的Chris Lattner博⼠主持开展。2006年Chris Lattner加盟Apple Inc. 并致⼒于LLVM在Apple开发体系中的应⽤。Apple也是LLVM计划的主要资助者。 ⽬前LLVM已经被苹果IOS开发⼯具、Xilinx Vivado、Facebook、Google等各⼤公司采⽤。
编译器分为前端和后端,前端一般做词法分析,后端生成对应平台的二进制代码,LLVM就是作为编译器的后端。
如上图,对于OC来说,编译器前端是Clang,对于Swift,编译器前端是swiftc,无论是OC还是Swift,编译器后端都是LLVM。先是由前端进行词法分析,再由后端生成对应平台的代码(iOS上是生成ARM架构的代码)。
如上图,先是由Swift代码生成AST语法树,又生成Swift特有的中间代码Raw Swift IL,再生成一个更简洁的版本,也是Swift特有的中间代码Canonical Swift IL,接来下转交给后端,生成LLVM IR代码,LLVM IR是LLVM的中间代码,LLVM编译器针对IR代码进行相应的优化,优化完毕之后最终转成汇编代码(Assembly),汇编代码最后再变成二进制代码(Executable)。详情可参考:https://swift.org/compiler-stdlib
- swiftc在哪?
在终端敲swiftc -help发现有反应,说明的确有swiftc,那么swiftc在哪呢?
swiftc存放在Xcode内部,路径为:
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
我们可以利用swiftc做一些简单的操作:
生成语法树: 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
对汇编代码进行分析,可以真正掌握编程语言的本质。