前言:
本篇為視頻學習筆記
目錄:
一、編譯器流程圖/編譯器
二尔苦、Swift與OC\C\C++有什么區(qū)別
三涕蚤、大概了解一下 Swift 編譯流程
四壳贪、swiftc (Swift前端編譯器)
一蕉世、編譯器流程圖/編譯器
編譯器
- 1.前端: 詞法分析...
- 2.后端: 生成對應平臺的二進制代碼/對二進制代碼進行相應的優(yōu)化 (LLVM)
二钞澳、Swift與OC\C\C++有什么區(qū)別
如果之前C\OC代碼的話税朴,編譯器前端是Clang,對OC代碼進行相應的處理碍扔。處理完畢后在轉(zhuǎn)交給編譯器的后端LLVM瘩燥,最終生成對應架構(gòu)的二進制代碼。
Swift編譯器前端就不一樣了不同,編譯器前端用的是swiftc,先用swiftc對swift代碼進行詞法分析厉膀、生成語法樹進行處理,處理完畢后二拐,再轉(zhuǎn)交給編譯器后端LLVM服鹅,生成對應平臺的二進制代碼。
無論是用OC/Swift編譯器后端都是用的LLVM百新,想運行在iOS系統(tǒng)中或是真機設(shè)備上企软,最終生成的都是ARM架構(gòu)代碼。
三饭望、大概了解一下 Swift 編譯流程
一開始是你自己編寫的Swift代碼【Swift Code】,然后再根據(jù)swiftc前端編譯器生成語法樹【Swift AST】,接下來有生成Swift特有的中間代碼【Raw Swift IL】,再生成一個簡潔的版本(Swift特有的中間代碼)【Canonical Swift IL】仗哨。Swift代碼不是一步到位變成二進制代碼的,是有一個流程铅辞。中間代碼生成完畢之后厌漂,轉(zhuǎn)交給后端(LLVM),生成一個【LLVM IR】代碼斟珊,它是LLVM的中間代碼苇倡。LLVM編譯器又會針對IR代碼進行相應的優(yōu)化。優(yōu)化完畢之后囤踩,最終轉(zhuǎn)成匯編代碼【Assembly】,匯編代碼最終變成二進制代碼【Executable】旨椒。
Swift代碼 -> 語法樹 -> 中間代碼 -> 轉(zhuǎn)交給LLVM -> 匯編代碼 -> 二進制代碼
四、swiftc (Swift前端編譯器)
打開終端堵漱,直接輸入swiftc钩乍,發(fā)現(xiàn)是有反應的,說明現(xiàn)在電腦上已經(jīng)有這個指令了
打印一下 swift -help 你會發(fā)現(xiàn)很清楚Swift compiler怔锌,是一個swift編譯器寥粹,后面跟了各種選項。
- swiftc存放在Xcode內(nèi)部
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
在bin文件夾中上下滾動埃元,你會發(fā)現(xiàn)Clang和swiftc都在Xcode內(nèi)部涝涤,這說明了OC/Swift的編譯器的那些指令都在Xcode內(nèi)部。
- 一些操作
- 生成語法樹: 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
★ 對匯編代碼進行分析岛杀,可以真正掌握編程語言的本質(zhì)
生成語法樹: 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
image.png