替代Objective-C?Swift尚不成熟
在今年蘋果的開發者大會上,最引人注目的當屬新的程式語言Swift的釋出。Swift是一門蘋果自主開發的程式語言,它由LLVM的創始人Chris Lattner在2010年開始著手設計,目標是在保證應用質量和效能的前提下,讓應用開發變得更加簡單、快速。蘋果宣稱Swift的特點是:快速、現代、安全、互動,且全面優於Objective-C語言。為了給Swift打好基礎,蘋果公司改進了編譯器、偵錯程式和框架結構,不難看出蘋果在Swift的設計上也煞費苦心。社交媒體上一時間鋪滿了對Swift的討論:
JavaEye的創始人Robbin在微博中寫到:“Swift目前只是提供了一種指令碼程式設計語法,編寫程式碼的效率提高不了多少,對程式設計師來說,熟悉Swift語法也不過一天時間足夠了。關鍵是要提供高階資料型別,簡化Cocoa類庫,否則用不用Swift都沒區別。當代的程式設計師,主要學習成本不在程式語言的語法上,而在語言提供的特殊資料型別和龐大的類庫上。”
CNET的Tim Stevens認為Swift是一門具有巨大潛力的程式語言,它在結合了指令碼語言與傳統編譯語言的優勢的同時,又兼有更快的執行速度(從幾項關鍵指標來看)。Swift的指令碼特性以及實時預覽功能可以幫助開發者方便快捷地編寫並測試應用程式。但Swift也沒有想象中的那麼美好,Objective-C在開發應用方面相對比較成熟,並且有了完整的生態圈,Swift想推倒一切重新開發,恐怕還需要一段時間。
資深iOS開發者郭亮認為Swift對於準備學習iOS開發的新手來說是個好訊息,畢竟它的入門門檻比較低,但對於已經習慣了Objective-C的上百萬開發者來說,又是一件痛苦的事情!因為他們已經愛上了Objective-C。Swift雖然門檻很低,但要真正熟練,道路依然荊棘,Protocol、Extension、繼承、多型還有閉包,真的沒那麼簡單。語言剛剛釋出,還會有許多的不完善,其效能、效率還有待驗證,並且相關資料非常少,應該只有蘋果官方的文件,也沒有開源社群的支援。所以Swift短期內取代Objective-C的可能性非常小,目前想用Swift單獨作為專案的開發語言,那將是災難性的。
iOS開發者黃兢成也在知乎上發表了自己的看法,他認為Swift 吸收了很多其它語言的語法,寫起來比Objective-C簡潔得多,不過它的核心概念和Objective-C差不多,比如引用記數、ARC、 屬性、協議、介面、初始化、擴充套件類、匿名函式。至於大會上提到的視覺化程式設計,他目前尚不清楚如何能較好的應用到實際專案中。Xcode 6 beta版本對Swift的語法提示支援也不好。Swift在實際專案中的使用還需要一段時間,但他相信蘋果釋出Swift,絕不是玩玩而已。
CocoaChina上的xu54認為Swift本質其實就是Objective-C的文字變種,對於這門全新的語言,蘋果做的工作其實遠沒有我們想像的艱鉅。LLVM編譯器做工作只是先把Swift翻譯成Objective-C程式碼,然後再把Objective-C程式碼翻譯成C語言程式碼,然後再把C語言程式碼翻譯成彙編,最終翻譯成機器碼。至於為什麼編譯器廠商這麼繞,不直接把自己的語言翻譯成彙編和機器碼,那是由於現有的語言編譯器(Objective-C、C )已經非常成熟,而高階語言間的文字轉換開發成本和維護成本都極其小。Swift之所以要翻譯成Objective-C,是由於Swift仍然需要Objective-C中的ARC、GCD 等環境。既然Swift其實就是Objective-C, 對入門者而言遠比Objective-C好學,對資深開發者來說又能節約很多無謂的低階重複的機械程式碼(這些程式碼在LLVM翻譯成Objective-C時,編譯器自動幫你寫上),並且開發者關注的應該是業務邏輯,而不把精力分散在語法等低階問題上,語法消耗的時間越少,這門語言也就越成功,所以他覺得Swift必定會替代Objective-C。
社群對Swift的評論好壞參半,Swift的優勢很明顯,短板也很明顯。新語言的成熟不可能一蹴而就,我們還需要有更多的耐心來等待Swift的成熟,不過我相信這個過程不會太久。蘋果願意捨棄成熟的Objective-C,轉而開發新的程式語言,這足以讓我們看到一家世界級公司的魄力與創新力。
相關文章
- Objective-C和Swift混編ObjectSwift
- Swift 呼叫 Objective-C 的可變引數函式SwiftObject函式
- XCode 中 Swift / Objective-C / C / C++ 混合程式設計XCodeSwiftObjectC++程式設計
- 來一次有側重點的區分Swift與Objective-CSwiftObject
- 一份非常詳盡的 Objective-C 到 Swift 的遷移指南ObjectSwift
- 【iOS開發黑科技】與tableViewDelegate,tableViewDataSource說再見,Objective-C,Swift雙版本...iOSViewObjectSwift
- 處理尚不存在的 DOM 節點
- 一個在 Objective-C 和 Swift 中實現剖面導向程式設計的故事ObjectSwift程式設計
- Objective-C 轉 Swift 的第一道坎——論如何正確的處理可選型別ObjectSwift型別
- Objective-C RuntimeObject
- 2022 軟體工程師狀況報告:Go 最搶手|開發者最“嫌棄” PHP、Swift、Scala/R/Objective-C軟體工程工程師GoPHPSwiftObject
- Objective-C 核心知識Object
- Objective-C中的CopyObject
- VMware Tanzu已融合雲原生與K8s 市場前景尚不確定K8S
- 逐步替代
- Objective-C 之ARC實現Object
- Objective-C記憶體管理Object記憶體
- Objective-C 類的本質Object
- Objective-C autosynthesis(自動合成)Object
- Objective-C 記憶體管理Object記憶體
- 淺談 Objective-C Associated ObjectsObject
- Objective-C的Introspection(內省)ObjectROS
- Objective-C Runtime(四)isa swizzlingObject
- 替代密碼密碼
- [swift 進階]讀書筆記-第八章:錯誤處理 C8P4 將錯誤橋接到Objective-CSwift筆記橋接Object
- Objective-C記憶體管理:BlockObject記憶體BloC
- Objective-C列印除錯資訊Object除錯
- Objective-C Runtime (一):類與物件Object物件
- Objective-C記憶體管理:物件Object記憶體物件
- Objective-C block 實現機制ObjectBloC
- Realm for SwiftSwift
- swift學習筆記《2》-swift語法Swift筆記
- 成熟的 Git 分支模型Git模型
- Oracle 替代變數Oracle變數
- 替代laravel whereHas方法Laravel
- AdoptOpenJDK替代Oracle JDKJDKOracle
- 談談Objective-C中的協議Object協議
- 重讀 Effective Objective-C 2.0 小記Object
- Objective-C中的self和super理解Object