Swift基礎(chǔ)語法(零)Swift的認(rèn)識和編譯過程查看

Swift基礎(chǔ)語法文章匯總

本文主要了解什么是Swift驮审,有哪些優(yōu)勢。了解Swift編譯流程窿撬。

主要內(nèi)容:

  1. 了解Swift
  2. 編譯流程

1. 了解Swift

Swift是Apple在2014年6月WWDC發(fā)布的全新編程語言,中文名和logo是“雨燕”。

Swift是一種高性能的系統(tǒng)編程語言撇叁。它擁有干凈而現(xiàn)代的語法,提供了對現(xiàn)有C和Objective-C代碼和框架的無縫訪問畦贸,并且默認(rèn)是內(nèi)存安全的陨闹。

盡管受到Objective-C和其他語言的啟發(fā),Swift本身并不是c衍生語言薄坏。作為一門完整而獨(dú)立的語言趋厉,Swift包下了流控制、數(shù)據(jù)結(jié)構(gòu)和函數(shù)等核心特性胶坠,以及對象君账、協(xié)議、閉包和泛型等高級結(jié)構(gòu)涵但。Swift更多的使用模塊杈绸,消除了對header的需要和它們帶來的代碼重復(fù)。初學(xué)者可以不用了解C或OC矮瘟,直接學(xué)習(xí)Swift瞳脓。

Swift的語法更加簡潔,得益于編譯器的強(qiáng)大澈侠,語法簡潔功能又強(qiáng)大劫侧。同時(shí)Swift是一門類型安全的語言,在安全方面下了很大的功夫。

Swift提供了Playground進(jìn)行代碼預(yù)覽烧栋,可以很方便的學(xué)習(xí)語法写妥。

Swift和OC可以混編,更方便過渡审姓。

Swift完全開源:https://github.com/apple/swift,主要采用C++編寫

2. 編譯流程

2.1 編譯器架構(gòu)

編譯過程和OC基本一樣珍特,僅僅是前端編譯器不一樣。因此詳細(xì)過程可以查看博客編譯流程詳細(xì)認(rèn)識

編譯器架構(gòu)
  1. 前端編譯器swiftc將源代碼生成語法樹魔吐,再生成IL扎筒,之后輸出為LLVM通用的IR。
  2. 優(yōu)化器LLVM Optimizer進(jìn)行各種優(yōu)化酬姆,改善代碼運(yùn)行時(shí)間嗜桌。再次輸出IR
  3. 后端編譯器LLVM Code Generator接收到IR,將代碼映射到目標(biāo)指令集辞色,生成二進(jìn)制代碼骨宠。

可以看出來,LLVM的設(shè)計(jì)理念就是前后端分離相满。只要提供不同的前端編譯器就可以兼容不同的語言层亿。只要提供不同的后端編譯器,就可以兼容不同的硬件架構(gòu)雳灵。使用中間語言IR做到兼容棕所。

2.2 編譯詳細(xì)過程

編譯詳細(xì)過程

創(chuàng)建一個(gè)簡單的Swift源文件,下面將編譯過程執(zhí)行一遍悯辙,具體的查看每一步的運(yùn)行結(jié)果

import Foundation

let i = 1
let j = 2

i + j

2.2.1 生成語法樹

swiftc -dump-ast main.swift
生成語法樹

說明:

  1. 語法分析程序判斷程序在結(jié)構(gòu)上是否正確琳省,它的任務(wù)是驗(yàn)證語法是否正確
  2. 在詞法分析的基礎(chǔ)上將單詞序列組合成各類此法短語,如程序躲撰、語句针贬、表達(dá)式 等等
  3. 然后將所有節(jié)點(diǎn)組成抽象語法樹AST(Abstract Syntax Tree)
  4. 這里還會將警告報(bào)錯(cuò)顯示出來,比如我只進(jìn)行了運(yùn)算但是沒有賦值拢蛋,所以會有 is unused的警告
  5. 大體分為三部分桦他,第一部分是i的定義,第二部分是j的定義谆棱,第三部分是加法運(yùn)算
  6. 加法運(yùn)算可以看到是調(diào)用了一個(gè)函數(shù)類型為(Int, Int) -> Int的函數(shù)來執(zhí)行的快压,而該函數(shù)在后面又進(jìn)行說明是.+。參數(shù)傳遞的是i和j垃瞧。
  7. 因此對語法樹的簡單分析可以看到就是針對所有的結(jié)構(gòu)進(jìn)行語法檢查蔫劣。最后形成一個(gè)抽象語法樹

2.2.2 生成IL代碼

swiftc -emit-sil main.swift
生成IL代碼

說明:

  • 這里生成的IL代碼,和匯編很類似个从,這里僅僅簡單了解脉幢,也沒必要對每條語句進(jìn)行分析歪沃。
  • 大體上可以看到是在寄存器上對i和j進(jìn)行存儲,之后取出進(jìn)行計(jì)算嫌松。

2.2.3 生成IR代碼

swiftc -emit-ir main.swift -o main.ll
IR代碼

說明:

  • 執(zhí)行后沪曙,會得到一個(gè)main.ll文件
  • 在文件中就是IR代碼。這里也是和匯編類似萎羔。
  • 將語法樹自頂向下遍歷逐步翻譯成LLVM IR液走。
  • 拿到IR后,就可以讓后端編譯器執(zhí)行贾陷,最后會變成二進(jìn)制文件育灸。

2.2.4 生成匯編代碼

swiftc -emit-assembly main.swift -o main.s
匯編代碼

說明:

  • 這里為了簡單,把加法運(yùn)算刪掉了昵宇。
  • 只查看兩個(gè)值的定義。通過movq給i和j分別賦值
  • 關(guān)于匯編的認(rèn)識后面文章會分析儿子,這里僅簡單的查看

2.2.5 生成二進(jìn)制文件

swiftc -o main.out main.swift
二進(jìn)制文件

說明:

  • 對匯編文件進(jìn)行匯編操作就得到了目標(biāo)文件(.o文件)
  • 匯編器將匯編代碼轉(zhuǎn)換為機(jī)器代碼瓦哎,最后輸出目標(biāo)文件(object file)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柔逼,隨后出現(xiàn)的幾起案子蒋譬,更是在濱河造成了極大的恐慌,老刑警劉巖愉适,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犯助,死亡現(xiàn)場離奇詭異,居然都是意外死亡维咸,警方通過查閱死者的電腦和手機(jī)剂买,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來癌蓖,“玉大人瞬哼,你說我怎么就攤上這事∽飧保” “怎么了坐慰?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長用僧。 經(jīng)常有香客問我结胀,道長,這世上最難降的妖魔是什么责循? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任糟港,我火速辦了婚禮,結(jié)果婚禮上沼死,老公的妹妹穿的比我還像新娘着逐。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布耸别。 她就那樣靜靜地躺著健芭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秀姐。 梳的紋絲不亂的頭發(fā)上慈迈,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機(jī)與錄音省有,去河邊找鬼痒留。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蠢沿,可吹牛的內(nèi)容都是我干的伸头。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼舷蟀,長吁一口氣:“原來是場噩夢啊……” “哼恤磷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起野宜,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤扫步,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后匈子,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體河胎,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年虎敦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了游岳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡原茅,死狀恐怖吭历,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情擂橘,我是刑警寧澤晌区,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站通贞,受9級特大地震影響朗若,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昌罩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一哭懈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茎用,春花似錦遣总、人聲如沸睬罗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽容达。三九已至,卻和暖如春垂券,著一層夾襖步出監(jiān)牢的瞬間花盐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工菇爪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留算芯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓凳宙,卻偏偏與公主長得像熙揍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子氏涩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

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