Swift从入门到精通01 - 初识

427 阅读1分钟

Swift历史

  • 历时5年发展,从Swift1.x发展到了Swift5.x版本,经历了多次重大改变,ABI终于稳定。
  • API(Application Programming Interface):应用程序编程接口: 源代码和库之间的接口
  • ABI(Application Binary Interface):应用程序二进制接口:
    1. 应用程序与操作系统之间的底层接口
    2. 涉及的内容有:目标文件格式、数据类型的大小\布局\对齐、函数调用约定等等
  • Swift完全开源: github.com/apple/swift… 主要采用C++编写

Swift编译流程

20190617182803956.png
编译器分为前端和后端:

  • 前端:词法分析
  • 后端:生成对应平台的二进制代码

Swift与OC和C的编译流程区别:C和OC编译器的前端是Clang,也就是以前的OC代码通过Clang这个编译器的前端进行处理,转交给LLVM这个编译器的后端,最后生成ARM的二进制代码。而Swift的编译器的前端是swiftc,通过swiftc进行词法分析和语法树处理,然后交给LLVM的后端编译器,最后生成ARM格式的二进制代码。 具体流程为:

20190617184601327.png
Swift代码-->通过swiftc生成Swift AST(Swift语法树)-->Raw Swift IL(Swift特有的中间代码)-->Canonical Swift IL(更简洁的Swift代码)-->转交给后端生成LLVM代码-->Assembly(汇编代码)-->Executable(二进制代码)。

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

对汇编代码进行分析,可以真正掌握编程语言的本质