標籤:org 曲線 中心 max ack active data oat stack
本文轉自:http://onevcat.com/2014/06/my-opinion-about-swift/
感謝原作者
儘管四點半就起床去排隊等入場,結果還是僅僅能坐在了蠻後面的位置看著大螢幕參加了今年的 Keynote。事實上今年 OS X 和 iOS 的更新亮點都不少。可是顯然風頭和光芒都讓橫空出世的 Swift 給搶走了。這部分內容由於不是 NDA。所以能夠提前說一說。
Swift 是 Apple 自創的一門專門為 Cocoa 和 CocoaTouch 設計的語言,意在用來替代 objc。
早上公布的時候有非常多朋友說事實上他們已經寫了非常久的 Swift,並且還給了一個網站,在這裡首先須要說明的是,這個網站的 Swift parallel scripting language 和 Apple 的 Swift 並非一個東西,兩者能夠說毫無關係。Apple 還在自己的 Swift 介紹頁面後面非常友好地放上了 Swift parallel scripting language 的站台連結,以提示那些真的想搜還有一個 Swift 卻被 SEO 誤導過來的可憐的孩子。
我個人來說,在把玩了 Swift 幾個小時之後,深深地喜歡上了這門新的語言。這篇文章以一個剛開始學習的人(事實上如今大家都是剛開始學習的人)的角度來對 Swift 做一個簡單的介紹,由於如今大家事實上是在同一個起跑線上,所以理解上可能會有非常多不精確的地方。出錯了也請大家輕噴指正。
什麼是 Swift
非常多人在看到 Swift 第一眼的感覺是。這丫是個指令碼語言啊。由於在非常多文法特性上 Swift 確實和一些指令碼非常相似。可是首先須要明白的是,至少在 Apple 開發中,Swift 不是以一種指令碼語言來執行的,全部的 Swift 代碼都將被 LLVM 編譯為 native code,以極高的效率執行。依照官方今天給出的 benchmark 資料,執行時比 Python 快 3.9 倍。比 objc 快 1.4 倍左右。我相信官方資料肯定是有些水分,可是即使這樣,Swift 也給人帶來非常多遐想和期待。Swift 和原來的 objc 一樣,是型別安全的語言,變數和方法都有明白的返回,而且變數在使用前須要進行初始化。而在文法方面,Swift 遷移到了業界公認的非常先進的文法體系。當中包括了閉包,多返回,泛型和大量的函數式編程的理念,函數也最終成為一等公民能夠作為變數儲存了(儘管詳細實現和使用方法上來看和 js 那種傳統意義的好像不太一樣)。
初步看下來文法上借鑒了非常多 Ruby 的人性化的設計,可是藉助於 Apple 自己手中 強大的 LLVM,效能上必需要甩開 Ruby 不止一兩個量級。
還有一方面。Swift 的代碼又是能夠 Interactive 來“解釋”啟動並執行。新的 Xcode 中增加了所謂的 Playground 來對開發人員輸入的 Swift 代碼進行互動對應,開發人員也但是使用 swift 的命令列工具來互動式地運行 swift 語句。細心的朋友可能注意到了,我在這裡把“解釋”兩個字打上了雙引號。
這是由於即使在命令列中。 Swift 事實上也不是被解釋啟動並執行,而是在每一個指令後進對從開始以來的 swift 程式碼了一遍編譯,然後啟動並執行。這種做法下依舊能夠讓人“感到”是在做互動解釋運行,這門語言的編譯速度和最佳化水平,可見一斑。同一時候 Playground 還順便記錄了每條語句的運行時候的各種情況,叫做一組 timeline。能夠使用 timeline 對代碼的運行逐步檢查,省去了斷點 debug 的時間,也很方便。
至於更具體的比方 Swift 的文法之類的,能夠參見 Apple 在 iBooks 放出的 The Swift Programming Language,或者你是開發人員的話,也能夠看看 pre-release 的參考文檔
Cool。我能夠如今就使用 Swift 嗎?
Swift 作為 Apple 欽定的 objc 的繼承者,作為 iOS/Mac 開發人員的話,是認為必須和值得學習和使用的。
如今 Swift 能夠和原來的 objc 或者 c 系的代碼混用(注意,不同於 objc 和 c++ 或者 c 在同一個 .mm 檔案裡的混編,swift 檔案不能和 objc 代碼寫在同一個檔案裡。你須要將兩種代碼分開)。編譯出來的二進位檔案是能夠執行在 iOS 7 和 iOS 8 的裝置上的(iOS 6 及之前的是不支援的)。
儘管我沒有嘗試過,可是使用新的 clang 對 swift 進行編譯的 app 二進位包,僅僅要你的 target 是 iOS 7 及以上的話,應該如今就能夠往 App Store 進行提交。
一個非常好的訊息是 Xcode 6 中應該是全部的文檔都有 objc 和 swift 兩種語言版本號碼了。所以在文檔支援上應該不是問題。而依照 Apple 開發人員社區的一貫的跟進速度。有理由相信在不久的將來,Apple 非常可能會果斷 drop 掉 objc 的支援,而全面轉向 swift。所以,關於標題裡的這個問題的答案,我個人的建議是,儘快學習。儘快開始使用。
假設你有一定的指令碼語言的基礎(Ruby 最好,Python 或者 JS 什麼的也非常不錯),又比較瞭解 Cocoa 架構的思想的話,轉型到新的語言應該全然不是問題。你會發現曾經非常多 objc 實現起來非常鬱悶的事情,在新語言下都易如反掌。
我毫不忌諱地說,在 Apple 無數project師和語言設計天才的努力下。Swift 吸收了眾多語言的精華。應該是如今這個世界上最新(這不是廢話麼),也是最先進的一門程式設計語言(之中的一個)了。而我覺得,也正是 Apple 對這門語言有這種自信,才會在這麼一個能夠說公司還在全盛的時候,不守陳規、如此大膽地進行語言的更換。由於 Apple 必然比你我都精於算計,切換語言帶來的利益必須遠大於弊端,才會值得冒如此大的風險。
在這個意義上來說。今天的公布會就是程式開發業界的一枚重磅炸彈。也必將寫入史冊,而你我事實上真的身在當中,變成了這段曆史的見證者。
怎樣開始?
非常easy,儘管曆年的 WWDC 都在 NDA 的控制之下使得我們無法討論過多的內容,可是這次的 Swift 破天荒地是在 NDA 之外的內容。Apple 已經放出了足夠多的資源讓我們開始學習。首先是官方的 Swift 的介紹頁面,你能夠瞭解一些 Swift 的基本特性和細節。
然後就是從 iBooks 下載Swift 的書籍。你能夠不必通讀全書。而僅僅須要高速瀏覽一下 35 頁之前的 Tour 部分的內容。就能夠開始將其運用到開發中了。由於不受 NDA 限制,所以 StackOverflow 的 swift 標籤和Google 上應該會立即充斥滿相關的問題和內容。及時跟進,相信和其它開發人員一同從零開始學習和進步,你會非常快上手並熟練使用 Swift 進行開發。
(由於真的。太好用了。你非常難想象我在寫一個美麗的閉包或者嵌套函數或者多返回時,那種內心的激動和喜悅...)
總結
這次的 WWDC 能夠說是 Apple 之前幾年布局的一個匯總和爆發。從一開始的 Mac 整合電話和簡訊,以及無處不在的 Handoff,到後面的通知中樞 widget 和系統 framework 的 extension,以及更甚的 Family Share 等等,能夠說 Apple 通過自己對產業鏈的控制和生態圈的完好。讓 iDevice 或者 Mac 的使用者粘度得到了前所未有的加強。對一個人來說,可能一台蘋果裝置之後他會非常easy購買第二台第三台;對於一家人來說,可能一個成員擁有蘋果裝置之後。其它人也會被宣傳和便捷帶動。
這是一手妙招,也是 Apple 近期幾年一直在做的趨勢。
羅馬事實上不是一天建成的,在開發語言方面,Apple 事實上也精心打造了非常多年。在語言而言,之前全然沒有這方面經驗的蘋果,毅然決然地選擇離開 GCC 陣營,另起爐灶自己弄 Clang 和 LLVM 的布局。而最終在幾年來對 objc 小修小補之後來了一次革命性的爆發。
在日進萬金的大好時候,拋棄一個成熟開發社區。而轉向一種新的程式設計語言,做出這樣的決策,僅僅能說這家公司的魄力讓人折服和欽佩。還有一方面,Apple 這麼做的還有一個理由應該是吸引很多其它的開發人員增加到 Apple 開發陣營,由於相對於 objc 的文法和學習曲線,Swift 顯然要easy非常多,對於其它陣營的開發人員,這也會是一個非常好的入場機會。
正應了這次 WWDC 的宣傳語。Apple 已經為我們提供了更好的工具,我們有什麼理由不繼續我們的征途,實現我們的夢想呢?
Write the code. Change the world.
關於 Swift 的一點初步看法