前言:
本篇为视频学习笔记
目录:
一、编译器流程图/编译器
二、Swift与OC\C\C++有什么区别
三、大概了解一下 Swift 编译流程
四、swiftc (Swift前端编译器)
一、编译器流程图/编译器
编译器
- 1.前端: 词法分析...
- 2.后端: 生成对应平台的二进制代码/对二进制代码进行相应的优化 (LLVM)
二、Swift与OC\C\C++有什么区别
如果之前C\OC代码的话,编译器前端是Clang,对OC代码进行相应的处理。处理完毕后在转交给编译器的后端LLVM,最终生成对应架构的二进制代码。
Swift编译器前端就不一样了,编译器前端用的是swiftc,先用swiftc对swift代码进行词法分析、生成语法树进行处理,处理完毕后,再转交给编译器后端LLVM,生成对应平台的二进制代码。
无论是用OC/Swift编译器后端都是用的LLVM,想运行在iOS系统中或是真机设备上,最终生成的都是ARM架构代码。
三、大概了解一下 Swift 编译流程
一开始是你自己编写的Swift代码【Swift Code】,然后再根据swiftc前端编译器生成语法树【Swift AST】,接下来有生成Swift特有的中间代码【Raw Swift IL】,再生成一个简洁的版本(Swift特有的中间代码)【Canonical Swift IL】。Swift代码不是一步到位变成二进制代码的,是有一个流程。中间代码生成完毕之后,转交给后端(LLVM),生成一个【LLVM IR】代码,它是LLVM的中间代码。LLVM编译器又会针对IR代码进行相应的优化。优化完毕之后,最终转成汇编代码【Assembly】,汇编代码最终变成二进制代码【Executable】。
Swift代码 -> 语法树 -> 中间代码 -> 转交给LLVM -> 汇编代码 -> 二进制代码
四、swiftc (Swift前端编译器)
打开终端,直接输入swiftc,发现是有反应的,说明现在电脑上已经有这个指令了
打印一下 swift -help 你会发现很清楚Swift compiler,是一个swift编译器,后面跟了各种选项。
- swiftc存放在Xcode内部
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
在bin文件夹中上下滚动,你会发现Clang和swiftc都在Xcode内部,这说明了OC/Swift的编译器的那些指令都在Xcode内部。
- 一些操作
- 生成语法树: swiftc -dump-ast main.swift
- 生成最简洁的SIL代码:swiftc -emit-sil main.swift (swift 特有的中间代码)
- 生成LLVM IR代码: swiftc -emit-ir main.swift -o main.ll
- 生成汇编代码: swiftc -emit-assembly main.swift -o main.s
★ 对汇编代码进行分析,可以真正掌握编程语言的本质
生成语法树: swiftc -dump-ast main.swift
1.打开Xcode新建名为TestSwift一个命令行项目,会自动为我们生成一个main.swift
2.选择main.swift,右键show in finder 在终端cd + main.Swift地址
3.明白自己做什么,导出语法树看看,输入swiftc -dump-ast main.swift
4.将语法树导出到另一文件(main.ast)中去,不倒入的话会在终端中显示swiftc -dump-ast main.swift -o main.ast
生成最简洁的SIL代码:swiftc -emit-sil main.swift
生成LLVM IR代码: swiftc -emit-ir main.swift -o main.ll
生成汇编代码: swiftc -emit-assembly main.swift -o main.s