iOS ~?編譯 Clang 、swiftc 、LLVM

推薦閱讀:

https://llvm.org
https://medium.com/@jyaunches/introduction-to-the-llvm-for-a-ios-engineer-8c00ed0f9ff0
https://swift.org/compiler-stdlib/#compiler-architecture
https://medium.com/@JMangia/swift-c-llvm-compiler-optimization-842012568bb7
https://zhuanlan.zhihu.com/p/49274308
https://juejin.im/post/5a352bb0f265da433562d5e3
https://blog.csdn.net/Hello_Hwc/article/details/53557308
https://developer.apple.com/videos/play/wwdc2018/415/
https://developer.apple.com/videos/play/wwdc2018/408

Presentation Slides (PDF) 下載


圖解編譯

“front end”?—?“back end”.jpeg

Swift Abstract Syntax Tree (AST)

  • swiftc –dump-ast main.swift

Swift Intermediate Language (SIL)

  • swiftc –emit-sil main.swift

LLVM Intermediate Representation (LLVM IR)

  • swiftc –emit-ir main.swift

Assembly Language

  • swiftc –emit-assembly main.swift

What is Clang?

Apple’s official for the C language family
C
C++
Objective-C
Objective-C++

編譯.png
編譯 鏈接.png

What is swiftc?

屏幕快照 2019-01-23 下午12.18.53.png
屏幕快照 2019-01-23 下午12.23.12.png
image.png

在xcode按下cmd+B之后的工作流程:

image.png
  • 預(yù)處理(Pre-process):他的主要工作就是將宏替換灿意,刪除注釋展開頭文件,生成.i文件崇呵。
  • 詞法分析 (Lexical Analysis):將代碼切成一個個 token缤剧,比如大小括號,等于號還有字符串等域慷。是計算機科學(xué)中將字符序列轉(zhuǎn)換為標(biāo)記序列的過程荒辕。
  • 語法分析(Semantic Analysis):驗證語法是否正確汗销,然后將所有節(jié)點組成抽象語法樹 AST 。由 Clang 中 Parser 和 Sema 配合完成
  • 靜態(tài)分析(Static Analysis):使用它來表示用于分析源代碼以便自動發(fā)現(xiàn)錯誤抵窒。
  • 中間代碼生成(Code Generation):開始IR中間代碼的生成了弛针,CodeGen 會負(fù)責(zé)將語法樹自頂向下遍歷逐步翻譯成 LLVM IR,IR 是編譯過程的前端的輸出后端的輸入李皇。
  • 優(yōu)化(Optimize):LLVM 會去做些優(yōu)化工作削茁,在 Xcode 的編譯設(shè)置里也可以設(shè)置優(yōu)化級別-01,-03掉房,-0s付材,還可以寫些自己的 Pass,官方有比較完整的 Pass 教程: Writing an LLVM Pass — LLVM 5 documentation 圃阳。如果開啟了 bitcode 蘋果會做進一步的優(yōu)化,有新的后端架構(gòu)還是可以用這份優(yōu)化過的 bitcode 去生成璧帝。
  • 生成目標(biāo)文件(Assemble):生成Target相關(guān)Object(Mach-o)
  • 鏈接(Link):生成 Executable 可執(zhí)行文件
    經(jīng)過這一步步捍岳,我們用各種高級語言編寫的代碼就轉(zhuǎn)換成了機器可以看懂可以執(zhí)行的目標(biāo)代碼了。

What is LLVM?

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines. The name "LLVM" itself is not an acronym; it is the full name of the project.

??注意

  • 名稱“LLVM”本身不是首字母縮略詞; 它是項目的全名睬隶。

The LLVM Project 是模塊化锣夹、可重用的編譯器和工具鏈技術(shù)的集合。包含多個子項目苏潜。其中包括我們熟悉的ClangLLDB

  • Clang is an "LLVM native" C/C++/Objective-C compiler,
  • The LLDB project builds on libraries provided by LLVM and Clang to provide a great native debugger.

除了LLVM的官方子項目之外银萍,還有許多其他項目使用LLVM的組件來執(zhí)行各種任務(wù)。通過這些外部項目恤左,您可以使用LLVM來編譯Ruby贴唇,Python,Haskell飞袋,Java戳气,D,PHP巧鸭,Pure瓶您,Lua和許多其他語言。LLVM的主要優(yōu)勢在于其多功能性纲仍,靈活性和可重用性呀袱,這就是它被用于各種不同任務(wù)的原因:從輕量級JIT編譯嵌入式語言(如Lua)到編譯Fortran代碼(用于大型超級)電腦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末郑叠,一起剝皮案震驚了整個濱河市夜赵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锻拘,老刑警劉巖油吭,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件击蹲,死亡現(xiàn)場離奇詭異,居然都是意外死亡婉宰,警方通過查閱死者的電腦和手機歌豺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來心包,“玉大人类咧,你說我怎么就攤上這事⌒诽冢” “怎么了痕惋?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長娃殖。 經(jīng)常有香客問我值戳,道長,這世上最難降的妖魔是什么炉爆? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任堕虹,我火速辦了婚禮,結(jié)果婚禮上芬首,老公的妹妹穿的比我還像新娘赴捞。我一直安慰自己,他們只是感情好郁稍,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布赦政。 她就那樣靜靜地躺著,像睡著了一般耀怜。 火紅的嫁衣襯著肌膚如雪恢着。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天封寞,我揣著相機與錄音然评,去河邊找鬼。 笑死狈究,一個胖子當(dāng)著我的面吹牛碗淌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抖锥,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼亿眠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了磅废?” 一聲冷哼從身側(cè)響起纳像,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拯勉,沒想到半個月后竟趾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憔购,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年岔帽,在試婚紗的時候發(fā)現(xiàn)自己被綠了玫鸟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡犀勒,死狀恐怖屎飘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贾费,我是刑警寧澤钦购,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站褂萧,受9級特大地震影響押桃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜导犹,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一怨规、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锡足,春花似錦、人聲如沸壳坪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爽蝴。三九已至沐批,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝎亚,已是汗流浹背九孩。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留发框,地道東北人躺彬。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像梅惯,于是被迫代替她去往敵國和親宪拥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 引言 維基百科:編譯語言(英語:Compiled language)是一種以編譯器來實現(xiàn)的編程語言铣减。它不像解釋型語...
    Flame_Dream閱讀 8,541評論 5 52
  • http://www.starming.com/index.php?v=index&view=107 http:/...
    111浪子111閱讀 3,117評論 0 11
  • iOS app的編譯過程 在 iOS 開發(fā)的過程中她君,Xcode 為我們提供了非常完善的編譯能力,正常情況下葫哗,我們只...
    帽子和五朵玫瑰閱讀 2,832評論 0 17
  • 在 iOS 開發(fā)的過程中缔刹,Xcode 為我們提供了非常完善的編譯能力球涛,正常情況下,我們只需要 Command + ...
    CoderLF閱讀 12,907評論 0 17
  • LLVM 簡介 LLVM 全稱是 Low Level Virtual Machine校镐,它是源自 the Unive...
    juniway閱讀 37,656評論 0 21