Swift簡介
在學(xué)習(xí)Swift之前甸赃,我們先來了解下什么是Swift
Swift是Apple
在2014年6月WWDC
發(fā)布的全新編程語言,中文名和LOGO是”雨燕“
Swift之父是Chris Lattner
胸嘴,也是Clang
編譯器的作者,LLVM
項(xiàng)目的主要發(fā)起人
Swift版本
Swift歷時(shí)七年斩祭,從Swift 1.*
更新到Swift 5.*
劣像,經(jīng)歷了多次重大改變,ABI
終于穩(wěn)定
API(Application Programming Interface):應(yīng)用程序編程接口
- 源代碼和庫之間的接口
ABI(Application Binary Interface):應(yīng)用程序二進(jìn)制接口
- 應(yīng)用程序和操作系統(tǒng)之間的底層接口
- 涉及的內(nèi)容有:目標(biāo)文件格式摧玫、數(shù)據(jù)類型的大小/布局/對齊耳奕,函數(shù)調(diào)用約定等
Swift是完全開源的,下載地址:https://github.com/apple/swift
Swift編譯原理
LLVM編譯器
LLVM編譯器一般分為前端和后端
前端:主要進(jìn)行詞法分析诬像,生成語法樹
后端:生成對應(yīng)平臺的二進(jìn)制代碼
編譯流程
我們知道OC的前端是通過Clang進(jìn)行編譯的屋群,Swift的前端是通過swiftc來編譯的
不同語言的前端可能不同,但最終都會(huì)通過編譯器的后端生成對應(yīng)平臺的二進(jìn)制代碼
整個(gè)編譯流程如下圖所示
- Swift Code:我們編寫的Swift代碼
- Swift AST:Swift語法樹
- Raw Swift IL:Swift特有的中間代碼
- Canonical Swift IL:更簡潔的Swift特有的中間代碼
- LLVM IR:LLVM的中間代碼
- Assembly:匯編代碼
- Executable:二進(jìn)制代碼
關(guān)于Swift編譯流程的詳細(xì)講解可以參考以下網(wǎng)址:https://swift.org/swift-compiler/#compiler-architecture
swiftc
我們打開終端坏挠,輸入swiftc -help
芍躏,會(huì)打印出相關(guān)指令,這也說明了swiftc
已經(jīng)存在于Xcode中
我們可以在應(yīng)用程序中找到Xcode降狠,然后右鍵顯示包內(nèi)容对竣,通過該路徑找到swiftc
路徑:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
swiftc的基本操作演練
下面我們可以通過一些swiftc的一些基本操作來了解
1.我們先新建一個(gè)Swift的命令行項(xiàng)目
2.然后打開終端,cd到main.swift路徑
3.然后我們輸入swiftc -dump-ast main.swift喊熟,來查看下生成的語法樹
4.我們還可以輸入swiftc -emit-sil main.swift生成最簡潔的SIL代碼
5.我們還可以輸入swiftc -emit-ir main.swift生成LLVM IR中間代碼
6.我們還可以輸入swiftc -emit-assembly main.swift生成匯編代碼