摘要 : 作爲一個70後程序員,克里斯前後發明了 LLVM、Clang 和 Swift,請問你作了什麼?
上 周出差勞頓,這篇文章幾回動筆都未完成,經常躺倒牀上就昏睡過去。南方的天氣悶熱潮溼,讓我感到極度的不適應,等到回到北方,天高雲清,空氣乾爽,讓人產 生一種「解放區的天是明朗的天」的感受,我甚至以爲本身的手機、Pad 和 Mac 都滿血復活了……直到有人提醒說它們是由於充電和網速的緣由。好吧,南方酒店的網絡還真叫慢啊……前端
如下是正文:ios
………………程序員
2010年的夏天,Chris Lattner 接到了一個不一樣尋常的任務:爲 OS X 和 iOS 平臺開發下一代新的編程語言。那時候喬布斯還在以帶病之身掌控着龐大的蘋果帝國,他是否參與了這個研發計劃,咱們不得而知,不過我想他至少應該知道此事, 由於這個計劃是高度機密的,只有極少數人知道,最初的執行者也只有一我的,那就是 Chris Lattner。算法
從2010年的7月起,克里斯(Chris)就開始 了無休止的思考、設計、編程和調試,他用了近一年的時間實現了大部分基礎語言結構,以後另外一些語言專家加入進來持續改進。到了2013年,該項目成爲了蘋 果開發工具組的重中之重,克里斯帶領着他的團隊逐步完成了一門全新語言的語法設計、編譯器、運行時、框架、IDE 和文檔等相關工做,並在2014年的 WWDC 大會上首次登臺亮相便震驚了世界,這門語言的名字叫作:「Swift」。編程
根據克里斯我的博客(http://nondot.org/sabre/ )對 Swift 的描述,這門語言幾乎是他憑藉一己之力完成的。這位著名的70後程序員同時仍是 LLVM 項目的主要發起人與做者之1、Clang 編譯器的做者,能夠說 Swift 語言和克里斯以前的軟件做品有着千絲萬縷的聯繫。swift
一樣是70後程序員,差異怎麼那麼大呢?後端
克 里斯能夠說是天才少年和好學生的代名詞,他在2000年本科畢業以後,繼續攻讀計算機碩士和博士。但克里斯並非宅男,學習之餘他手捧「龍書」遊歷世界, 成爲德智體美勞全面發展的好學生。以後就是一篇又一篇的發表論文,碩士畢業論文即提出了一套完整的運行時編譯思想,奠基了 LLVM 的發展基礎,讀博期間 LLVM 編譯框架在他的領導下獲得了長足的發展,已經能夠基於 GCC 前端編譯器的語義分析結果進行編譯優化和代碼生成,因此克里斯在2005年畢業的時候已是業界知名的編譯器專家了。數組
注:不少計算機專業的大學生常常問我在大學裏學點什麼好,看看克里斯就好了。以目前的科技信息開放程度,若是你在本身感興趣的領域裏用心耕耘,再加上那麼一點點天分,畢業時成爲某一個專有領域的專家應該不是問題。那時就不是你滿世界去找工做了,而是工做滿世界來找你!安全
克里斯畢業的時候正是蘋果爲了編譯器焦頭爛額的時候,由於蘋果以前的軟件產品都依賴於整條 GCC 編譯鏈,而開源界的這幫大爺並不買蘋果的賬,他們不肯意專門爲了蘋果公司的要求優化和改進 GCC 代碼,因此蘋果一怒之下將編譯器後端直接替換爲 LLVM,而且把克里斯招入麾下。克里斯進入了蘋果以後如魚得水,不只大幅度優化和改進 LLVM 以適應 Objective-C 的語法變革和性能要求,同時發起了 CLang 項目,旨在全面替換 GCC。這個目標目前已經實現了,從 OS X10.9和 XCode 5開始,LLVM+GCC 已經被替換成了 LLVM+Clang。服務器
Swift 是克里斯在 LLVM 和 Clang 以後第三個偉大的項目!
2007 年以前,Objective-C 一直是蘋果自家院落的小衆語言,可是 iOS 移動設備的爆發讓這門語言的普及率得到了火箭通常的躥升速度,截止到今天,Objective-C 在編程語言排行榜上排名第三,江湖人稱三哥,大哥二哥分別是 C 和 Java 這樣的老牌語言。同時,蘋果在2012年和2013年分別對 Objective-C 進行了大規模的優化和升級改進,增長了各類現代語言的特性,讓編寫 App 更加容易,更多的程序員投入到了 App Store 的生態圈裏……
在這種狀況下,蘋果公司爲何會發布一門新語言呢?
這個問題沒有標準答案,不過咱們能夠試着去分析一下,談談蘋果的心路歷程……
Objective-C 是80年代初 Brad Cox 和 Tom Love 發明的,1988年喬布斯的 Next 公司得到了這門編程語言語言的受權,並開發出了Objective-C 的語言庫和NEXTSTEP的開發環境。後來 Next 被蘋果收購,Objective-C 陰差陽錯成了蘋果的當家語言。掐指一算,三十年倏忽而過,OC 也成長爲爺爺輩兒的編程語言了。
爲了伺候好這位「爺爺」,蘋果煞費苦心,把 GCC 的編譯鏈先替換成 LLVM +GCC,又替換成 LLVM+Clang,作語法簡化、自動引用計數、增長 Blocks 和 GCD 多線程異步處理技術……終於,OC 在30年後從新煥發出勃勃生機,並佔據了兵器譜排名第三的位置。可是,蘋果卻有點煩了,OC 改進了這麼多年,怎麼看都像是在修修補補,用 Blocks 去實現一個相似 Python 的 lambda 閉包功能,看起來老是那麼彆扭。好吧,既然已經全盤掌握了 LLVM 和 Clang,爲何咱們不去基於如今的編譯器設計一門全新的語言呢?一門屬於蘋果的語言!你看,鄰居谷歌家裏叫作 Go 的孩子不是玩耍正酣麼?
因而 Swift 誕生了……
固然,事實的真相也多是行動緩慢的喬老爺子把克里斯拉到一邊說:
「I want to be swift to……」
「 行了,您別說了,不就是想要 swift 嗎,我這就給您作一個去」
因而 Swift 誕生了……
Swift 是一門博採衆長的現代語言,在設計的過程當中,克里斯參考了Objective-C,Rust,Haskell,Ruby,Python,C#等優秀語言的 特色,最終造成了目前 Swift 的語法特性。我在閱讀了官方教程和作了些代碼實驗以後,自我感受會喜歡上這門語言,在這裏簡單談點感想,更深刻的內容須要大家本身去深刻學習。
一、Swift 是面向 Cocoa 和 Cocoa Touch 的編程語言,編譯型語言,生產環境的代碼都須要 LLVM 編譯成本地代碼才能執行,可是Swift又具有不少動態語言的語法特性和交互方式。
二、Swift 是一門類型安全的語言,能夠幫助開發者清楚的掌控代碼片斷中的值類型。若是你指望輸入的是字符串,類型安全的特性會阻止開發者錯誤地爲其傳遞一個整數。這一切使得開發者可以更早的發現和修復錯誤。
三、支持各類高級語言特性,包括閉包、泛型、面向對象、多返回值、類型接口、元組、集合等。
四、Swift 能與 Objective-C 進行混合編程,但代碼分屬不一樣的文件。
五、全面的Unicode支持,你甚至能夠用一隻🐶做爲變量名,實現如下操做:
let 🐶 = "大狗菠蘿"
for n in 🐶{
println( n )
}
控制檯會輸出「大狗菠蘿」四個字。
六、編程語句取消了大部分語言使用的「;」分隔符,只有一行寫多條語句時才須要分號。
七、不少人簡單閱讀了 Swift 的數據類型,就認爲 Swift 沒有相似 Set、List 這樣的數據結構,其實Swift 提供了兩種 Collection 的數據類型:數組(Array)和字典(Dictionary),兩個數據類型的表達式都用中括號標識。其中數組能夠存儲任意類型的變量,也能夠強制聲明 存儲同一種類型的變量。同時數組提供了相似 Set 功能,你能夠修改、追加、替換和刪除數據的元素。另外,Swift 還提供了元組(Tuple)的功能支持函數多返回值。
八、Swift 沒有提供顯式的指針,參數傳遞根據數據類型的不一樣分爲值類型和引用類型,值傳遞進行內存拷貝,引用傳遞最終傳遞的是一個指向原有對象的指針。這一點和 Java 的參數傳遞是相似的。須要注意的一點是,Swift 裏的數組和字典雖然都是結構體(struct),但在參數傳遞過程當中處理方式卻不同,默認 Array 是引用傳遞,Dictionary 是值傳遞。而在 Java 中,因爲數組和 Map 都是對象,因此傳遞的都是指針。
在 Swift 中,若是你不想傳遞數組引用,能夠用 copy() 方法先複製一份出來,另外,也能夠用 unshare() 表示,本變量不傳遞指針。
九、閉包,Swift 終於提供了一種優雅的閉包解決方案,好比在排序函數 sort 中進行函數傳遞:
let names = ["D", "B", "R", "C", "A"]
func backwards(s1: String, s2: String) -> Bool {
return s1 > s2
}
var rnames = sort(names, backwards)
事實上更簡單的寫法是:
var rnames = sort( ["D", "B", "R", "C", "A"] ) { $0 > $1 }
十、可選變量(Optional)的引入主要是爲了應對一個變量可能存在也多是 nil 的狀況,這種狀況在不少高級語言裏都存在。好比你想使用String的toInt方法將String轉化爲 Int 類型,可是你並不知道這個轉化是否正常,這時候系統會返回一個可選變量,若是轉換成功就返回正常值,轉換失敗就返回 nil,以下:
let str = "123A"
let nn = str.toInt()
這是 nn 就是可選變量,想獲得 nn 的值,能夠經過 if 進行判斷並經過追加感嘆號獲取變量值,以下:
if nn {
println(nn!)
}
可選變量的引入解決了大部分須要顯式處理的異常,這部分工做也扔給編譯器去作了。想了解更多可選變量的用法,請閱讀蘋果的官方文檔。
十一、Swift 中的 nil 和 Objective-C 中的 nil 不一樣。在 Objective-C 中,nil 是指向不存在對象的指針,而在 Swift 裏,nil 不是指針,它表示特定類型的值不存在。全部類型的可選值均可以被設置爲nil,不只僅是對象類型。
十二、Swift 沒有從語言層面支持異步和多核,不過能夠直接在 Swift 中複用 GCD 的 API 實現異步功能。另外沒看到 Swift 的異常處理機制,可能有了可選變量,異常的使用會很是少吧。
關於語法相關的內容,先寫這麼幾點吧。
給你們推薦一篇王巍 (@onevcat)寫的「行走於 Swift 的世界中」,深刻閱讀必有收穫。http://onevcat.com/2014/06/walk-in-swift/
基本上,Swift 絕對不是玩具語言,而是一門能夠被大衆接受的工業級編程語言。相信假以時日,Swift 必將在 App 開發領域大放異彩。
Swift 在 WWDC 上展現出來的性能仍是讓人很是吃驚的,在進行復雜對象排序時,OC 的性能是 Python 的2.8倍,Swift 是 Python 的3.9倍;在實現 RC4加密算法的時候,OC 的性能是 Python 的127倍,Swift 是 Python 的220倍。總之 Python 在某一個深坑裏膝蓋中箭了,OC 也沒好到哪去,而 Swift,就是快啊就是快!
對於這一點我並非很理解,首先是 WWDC 上展現的語言層面的基準測試過於簡單了,另外,OC 和 Swift 都是被 LLVM 編譯成本地代碼執行的,理論上針對 Swift 的優化一樣能夠應用於 OC,可是 Swift 竟然比 OC 快那麼一點點,難道 LLVM 單獨針對 Swift 作了優化麼?我表示不明覺厲。
固然,還有更較真的程序員,他在第一時間針對於循環、遞增、數組、字符串拼接等功能進行了測試,發現 Swift 的性能比 OC 仍是差那麼一點點的(http://www.splasmata.com/?p=2798 )。
不管這些測試數據是否準確,我以爲性能是咱們最不須要擔憂的問題,蘋果已經全盤掌握了這個語言的方方面面,從底層編譯框架到編譯器再到語言設計,優化之路纔剛剛開始,咱們只要給這門新語言一點耐心就能夠了。
對於開發者來講,Playground 是本次 WWDC 最大的亮點。可以在編碼的同時實時預覽輸出結果是每一個開發人員的夢想,這一次蘋果爲你們提供了這樣的福利。
Playground 不只實現了不少腳本語言支持的交互式編程,並且提供控制檯輸出、實時圖形圖像、時間線(timeline)變量跟蹤等功能,開發者除了能夠看到代碼的實時運行結果,還能根據時間線閱讀某個變量在代碼片斷中值的變化。這真是太棒了!
最初看到這個功能的時候我甚至覺得每一個 Swift 文件均可以基於 Playground 進行實時編碼預覽,仔細閱讀文檔後發現,只能在 XCode 提供的 Playground 文件中實現以上功能。看來 Playground 顧名思義,目前還只是爲開發者提供了一個玩耍代碼的地方。
固然不只僅是玩耍,咱們能夠基於 Playground 作這些事情:
一、學習:經過 Playground 學習 Swift,製做 Swift 教程實現交互式學習,同時還能夠培訓其餘初學者。
二、代碼開發:執行算法程序,迅速看到算法結果,跟蹤變量;執行繪圖程序,即時看到圖像結果,及時調整。執行通用代碼,查看變量的改變狀況。
三、實驗性代碼:無需建立項目,直接打開一個獨立的Playground文件便可編寫代碼,嘗試調用新的 API。
對於 Playground,設計者克里斯是這樣描述的:Playground 功能傾注了我我的不少心血和激情,我但願新的編程語言具有更好交互性,更友好和有趣……咱們但願經過這門語言從新定義「如何教授計算機科學!」
做 爲一門新語言,Swift 定位很是明確,就是吸引更多的開發者加入蘋果的軟件生態圈,爲 iOS 和 OS X 開發出更爲豐富的 App,若是你是 App Store 的開發者,推薦儘早學習和掌握這門蘋果力推的新語言。對於大部分新事物來講,越早介入,獲利越多。若是你是一名 Web 相關的開發者,與其等待 Swift 增長 Web 開發的相關特性,還不如去學習一下 Go 語言 Web 編程。
如何開始 Swift 呢?
一、下載 Xcode6-Beta 版本。
二、下載蘋果官方提供 Swift 編程語言電子書(https://itunes.apple.com/cn/book/swift-programming-language/id881256329?mt=11 ),中文版本:http://yuedu.baidu.com/ebook/6f6c3b1ef01dc281e43af000 。讀。
三、下載 WWDC Swift 的 Session 視頻和PDF。看。
四、基於 Xcode6建立 Swfit 語言的項目,在項目中建立Playground,在其中調試玩耍。
五、根據官方提供的 GuidedTour.playground 學習 Swift 語法特性。下載地址:https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/GuidedTour.playground.zip
六、熟悉了基本的語法特性、與 OC 的混用、與 Cocoa 和 Cocoa Touch的交互、調試等功能以後,就能夠構建你的第一個Swift App 了。
………………
能夠說 Swift 是我所見過關注度最高的新語言,一經推出即萬衆矚目,媒體和開發者在數天以內對 Swift 進行了長篇累牘的報道和討論,英文手冊迅速被翻譯成中文,即便是江湖上的另外一位大佬谷歌 2009 年推出 Go 語言時也沒有如此浩大的聲勢。固然,這和 Go 語言的定位有關,做爲一門系統級的服務器端語言,開發者的可選餘地太大了,若是谷歌推出 Go 是用來取代 Java 開發 Android App,那可能狀況就徹底不同了。
通過 WWDC2014,蘋果已經徹底體現出了一個軟件公司的創新能力和技術底蘊,不管是操做系統,編程語言,仍是應用開發,蘋果都已經準備好了,凝神靜氣,蓄 勢待發。做爲開發者,咱們要作的就是:Write the code, Change the world,而後期待下一個收穫的季節!