本篇文章翻譯自:Objective-C in a Swift World
原作者:BEN SANDOFSKY
如果Swift成功了,Objective-C就會離開。它不會被遺棄,而是會去佛羅里達州享受它的退休時光。在無數(shù)個白天中運行著有百萬行代碼的古董級app,在無數(shù)個夜晚伴帶著沒人再敢去重寫的OAuth庫,小口的抿著瑪格麗塔。直到多年以后,打開iOS 的發(fā)行說明,你會看見在仆告欄中寫著Objective-C辭世了。于是它就這樣的離開了我們。
iOS的交叉編譯工具鏈(toolchain)一直支持多語言,每種語言解決不同問題。C++是為跨平臺的app服務,尤其是游戲。如果你需要提高性能或是位操作(bit fiddling),就用C語言。
Apple沒說過"Objective-C和Swift是分別用來針對不同問題的"。2014年WWDC的演講中,Swift第一次被描述為"現(xiàn)代的"。今年則是"寫的更快,更易維護"。Apple說這兩種語言它都喜歡,卻把最好的成年禮給了swift。
雙語言環(huán)境分裂了iOS開發(fā)者社區(qū)。你的公司可以決定使用其中一種,讓剩下50%的開發(fā)者苦惱,或者兩種都支持,然后在瑣碎的style guide上多花一倍的時間。
如果長遠目標不是用來取代Objective-C的話,Apple也不會在Swift上投資。Apple還沒做好準備這么說,因為他們知道事實有可能不是這樣。他們不想重蹈Mac OS X 10.5中引入的垃圾回收器(garbage collector)在10.8中遺棄,又在10.10中移除這樣尷尬的覆轍。對系統(tǒng)而言是更好,不過你還是和那些用了垃圾回收器然后又被迫放棄的衰人們這么說吧。
我們正處于developer advocacy(大意是有部分開發(fā)者置身于做出更利于其他開發(fā)者開發(fā)的各類平臺,工具,開源軟件,第三方API等等 - 譯者注)的第一階段。Apple開始說,"你應該看看Auto Layout!"之后他們收集了一年的反饋,修好了bug和使用上的不便,接著說,"你現(xiàn)在應該是正用著Auto Layout呢。"然后他們發(fā)布了不同尺寸的iPhone。"真的建議你用Auto Layout了,順便再看看size classes!"哦看吶,iPad的多任務就是用size classes做的。
Swift在它的初期采用者中很成功,但是稍大的公司都是"再等等看"。如果Apple決定了正式宣布swift就是被選中的語言,這事兒必須一次成。讓你的CTO看上Xamarin(一個有跨平臺能力的開發(fā)平臺,可以做到一次編碼,iOS、Android和windows通用 - 譯者注)可是一個極難的過程。"啥?iOS用兩種語言?那把它寫進.Net里然后全公司統(tǒng)一(意思是有這么簡單就好了 - 譯者注)!"
Swift從Python3的慘敗中吸取了很多經(jīng)驗。在Python3發(fā)布6年之后,68%的開發(fā)者的項目還是用Python2.x寫的。其中的一個問題是與第三方庫后向兼容性,如果不支持Python3的話它們根本就用不了。
因此Swift就必須要有完美的后向兼容性,實際上這點Apple做的很棒。它是顯得那樣的神奇,可出現(xiàn)問題之后就不是了。我浪費了一個小時嘗試用swift與C函數(shù)指針做互操作,最終放棄,退而求其次用了Objective-C。我做的每一個Swift 1.2的項目都需要自己寫的這些Objective-C的小補丁。
時至今日,如果不先成為一個Objective-C開發(fā)者的話你是成為不了一個Swift開發(fā)者的。而在Apple正式說"用Swift吧"之前,你需要鍛煉出只用Swift就能完成開發(fā)的能力。他們正在大步前進:我的函數(shù)指針掙扎了幾周之后,Swift 2.0的發(fā)布就把我的這個問題解決了。
Python 3的另外一個問題是你不能去說服一個社區(qū)把現(xiàn)有的一切都丟棄掉,重寫那些已能完美運行的代碼,除非報酬極高。Python 3語言的純度還不高。"沒錯,它挺酷的,但要用它我還得過來把它裝載起來。"
Swift小組選取了高格調(diào)卻更困難的方式。Joe Groff說,"如果它確實好,我們就不需要強迫人們?nèi)ナ褂盟?
最快實現(xiàn)這個的方法是讓swift在開放世界的app中反復的迭代運行。但是Swift想要徹底改變現(xiàn)有語言環(huán)境需要的是一個沒有常年反對聲音的自由環(huán)境。Apple需要人們?nèi)ビ肧wift,太多人還不行,而且這些人還得了解即將進入的這個領域。于是我們現(xiàn)在就處于一種"Objective-C暫時哪兒也不會去,但是你真應該試試Swift!"的中間立場。
Swift會迎來一個引爆點。當Objective-C的搬遷已經(jīng)完美,開發(fā)者求著經(jīng)理要swift的開發(fā)許可時,Apple會說: "你現(xiàn)在就應該用著Swift呢",然后推崇大家放棄Objective-C。多年以后Objective-C可能會被遺棄,但是永遠也不會被移除。它依然給iOS提供性能,而且OS X依然還運行著部分Carbon(MAC系統(tǒng)的一種API - 譯者注),即使后者被官方宣布棄用。
當我發(fā)了一條Objective-C終將離開的twitter時,我也開啟了互聯(lián)網(wǎng)最愛的娛樂時間:"告訴你,你錯了。"我選詞還是很慎重的。Objective-C的離開,不會是因為官方宣布棄用它了,而是由于它本身變得無足輕重。
如果你堅持用Objective-C,有3種事情可能會發(fā)生:
- Swift失敗了,然后消失了:漂亮!你會是一個嫻熟的工程師,而且為公司節(jié)省了時間、金錢,還消除了風險。
- 我們被卡在一個雙語言的世界中:你可能會錯過一些大的機遇。
- Swift成功了:Objective-C成了下一個Cobol(一種非常古老的高階編程語言 - 譯者注)。如果你喜歡古董級的程序,在宇宙的熱寂來臨前你還是能保住你的飯碗的。
什么是投身于Swift的最佳時機?
2005年我在Rails上發(fā)現(xiàn)了Ruby。當時是非常前沿的技術,拿來做業(yè)務還不是很安全。不過我還是找到機會做了很多項目,一個比一個大。2007年我得到了自己職業(yè)上的巨大回報。2009年,我的Rails背景讓我在Twitter上找到了自己的職位。
學習超前沿的技術就像給一個創(chuàng)業(yè)公司做投資:高風險,高回報。這就是為什么你只在認為賠錢能接受的情況下才去做天使投資的原因。同時還要把你的退休金保存共同基金里。
對Swift先持觀望態(tài)度是有諸多合理原因的。據(jù)大家說swift的每次更新會需要我們用1到2天去做適配。也許你的代碼庫更加龐大,或者你不能接受更新所帶來的中斷。目前,完全可以理解。
如果你正管理著一家大型公司,去年應該還是"再等等看"。2015年就是你應該加速并安排它未來計劃的一年了。此時就是把swift試用在非關鍵的,green field項目(指受之前項目約束很小的項目 - 譯者注)里的恰當時機。
你不需要把一切都押在Swift上,但最好開始嘗試它。