更新時(shí)間:2016年04月22日13時(shí)32分 來源:傳智播客 瀏覽次數(shù):
深度解析Swift for Android傷害?
鑒于最近各大媒體都在瘋傳Android親爹Google醞釀將swift作為未來安卓開發(fā)的第一語言!Android開發(fā)們炸了鍋?這是語言入侵!活生生的Swift for Android傷害!
首先來水一水各自入侵?
C++Java C# 這種本來就叫 general purpose language。 意思就是什么都能干,什么都能寫。從桌面,到移動(dòng),到server。
Swift的初衷也只是想加入這個(gè)陣營而已,而且本身他也有加入這個(gè)陣營的條件, server不說。蘋果本身就已經(jīng)有了桌面和移動(dòng)著兩大平臺(tái)。
來說說Android倚賴的Java,Java 設(shè)計(jì)出來的目的是為了給電冰箱發(fā)郵件,卻入侵了電腦,入侵了 Web,現(xiàn)在又入侵了 Android。同樣,JavaScript 設(shè)計(jì)出來是給網(wǎng)頁做動(dòng)態(tài)效果,現(xiàn)在入侵了服務(wù)器端(該死的nodejs),還入侵了手機(jī)App(shit react!)。Java 剛出爐的時(shí)候有三個(gè)版本,ee主要做web,se做桌面,me做嵌入式。在Java的各種書籍里大致都有提到,Java什么都能做,那么Java語言的發(fā)明是否傷害了其他的編程語言呢?還是說為了不傷害其他編程語言,難道真的是為了語言保護(hù)而不要再發(fā)明新的編程語言了嗎?
世界在發(fā)展技術(shù)在更新,抱著初衷不放、不能放開發(fā)展開發(fā)語言,那也太不炫酷了。另外,迄今為止這么多的語言被不斷發(fā)明和替代,市場(chǎng)和程序員會(huì)做出選擇的,so,不要替編程語言的命運(yùn)操心了,不管是Android開發(fā)者還是IOS開發(fā)者~
除非專用語言比如Fortran/lua之類的,否則和其他語言有一定的交集和競(jìng)爭(zhēng)很正常。有競(jìng)爭(zhēng)不好嗎?
說到底,既然某種開發(fā)語言現(xiàn)在用起來舒服了,就想方設(shè)法想要擴(kuò)展它的局限性。
比如說 Go 語言做 Android 程序,熟悉 C/C++ 有財(cái)力的公司,會(huì)舍棄生態(tài)鏈異常完整的 Java ,舍棄 C/C++ 攫取硬件性能的能力,選擇 Go 語言?為了什么?Go 語言的編輯的效率?得益于開發(fā)工具,Java的編寫效率一點(diǎn)也不慢。而用 Go 語言折騰一個(gè)開發(fā)環(huán)境,又是一件費(fèi)力不討好的事。
再者說,Swift,聽說它的主力開發(fā)是LLVM 的作者。而且相對(duì)封閉,不像 Rust 廣泛聽取社區(qū)的意見。所以有人說它的未來可能更好,因?yàn)楝F(xiàn)在盛行的語言,所有都是1,2個(gè)人做出來的。一個(gè)社區(qū)砸進(jìn)去,不見的是件好事。但 Swift 真的能打敗前任,擠進(jìn)服務(wù)器市場(chǎng)嗎?
Swift為了避免重復(fù)造輪子,對(duì) C 和 Object-C 的兼容性很好,基本可以直接調(diào)用它們寫的庫。采用引用計(jì)數(shù)垃圾回收。但問題是,它本身的目的是為了更傻瓜化 iOS 軟件的開發(fā)的。它無論現(xiàn)在還是未來,都會(huì)偏向這個(gè)目的。那為什么偏要用不是專業(yè)干這件事的工具,折騰來折騰去,來干這件事呢?
現(xiàn)在 Swift 離開了 iOS 平臺(tái),基本什么事都干不了。如果不調(diào)用 C 庫的話。但能調(diào)用 C 庫干這種事的語言太多了。它們的生態(tài)也比 Swift 完整多了。
語言只是工具,對(duì)公司而言,選擇成熟的穩(wěn)定的方案遠(yuǎn)比慢慢去踩坑更佳靠譜。比如對(duì)Golang而言,定位最初還是操作系統(tǒng)語言呢,現(xiàn)在看起來主要的方向還是高效分布式應(yīng)用方向。Swift離開iOS不是不可以,對(duì)外部社區(qū)的態(tài)度目前還不清楚,不過會(huì)的基本是iOS程序員,你讓他們?nèi)懛?wù)端了,誰來寫iOS程序呢?
現(xiàn)在語言的跨平臺(tái)跨方向應(yīng)用主要還是為了讓人員發(fā)揮更大作用,盡可能的榨干它們的價(jià)值,比如前后端分離之類的。語言的應(yīng)用場(chǎng)景越多,對(duì)初創(chuàng)或者個(gè)人作坊幫助比較大,但是伴隨著體量和需求的增加,大部分還是回到老路上來(分工明確與協(xié)作)。
關(guān)于swift談一下看法,只說Swift本身。雖然做Android不做iOS相關(guān)的開發(fā),但看好swift。swift語法相對(duì)平易近人,開源加上蘋果的持續(xù)投入,未來類庫和性能也不會(huì)差。掌握它一門能iOS和后端都能玩,群眾基礎(chǔ)會(huì)非常好。只要群眾基礎(chǔ)好,語言持續(xù)發(fā)展搞出便于前后端開發(fā)的庫和內(nèi)置并發(fā)之類的根本就不是事。
前陣子看到一個(gè)評(píng)測(cè),在一些case上的性能swift甚至都超過rust了。iOS領(lǐng)域自不必說,現(xiàn)在swift開源支持多個(gè)平臺(tái)。用swift在linux寫寫服務(wù)也是很自然的。未來swift在前后端都用太正常不過了。
然而swift最大的潛在問題就是ChrisLattner千萬不要把它語法B格升的太高,一定要持續(xù)走現(xiàn)在相對(duì)樸素的路線,過于高冷不適合廣大群眾。------------之所以這么說,是因?yàn)榉偶偾翱吹紺hris Lattner在考慮swift是否加上一些類似于rust那種風(fēng)格的Lifetimes ,Ownership 的東東。這些東西一旦引入了,容易脫離廣大群眾。
說完了Swift本身,再回到主題,真能造成傷害嗎???現(xiàn)在Android開發(fā)社區(qū)中除了Java以外,最常使用的開發(fā)語言是Scala, Groovy 以及才出來的 Kotlin,他們之間有什么相同點(diǎn)呢?他們都是JVM語言,因此他們可以被編譯成class文件,打包成為dex文件,進(jìn)而運(yùn)行在Android 虛擬機(jī)上。
而現(xiàn)在,假定我們使用Swift作為開發(fā)語言,會(huì)遇到哪些問題:
第一個(gè)問題就是已有的Android版本是不支持Swift編譯出的應(yīng)用的,Swfit本身就不是作為一種JVM語言開發(fā)的,因此如果強(qiáng)行把他編譯成class文件,工作量很大。所以如果真有Swift應(yīng)用,也只能在新版本的Android系統(tǒng)中運(yùn)行,但是Android不比iOS,系統(tǒng)升級(jí)率那是相當(dāng)?shù)牡停蚁霙]有任何一個(gè)開發(fā)者會(huì)愿意拋棄老版本的Android用戶。
第二個(gè)問題就是Android的生態(tài)環(huán)境,Android從09開始發(fā)布,到現(xiàn)在已經(jīng)7年了,各種開源社區(qū)和開源項(xiàng)目都是圍繞著Java語言進(jìn)行開發(fā),就算是Scala,Groovy和Kotlin也是能夠直接調(diào)用Java代碼。如果選用了Swift,如果完全拋棄現(xiàn)有的開源項(xiàng)目框架,成本很高,但如果需要直接操作Java代碼,勢(shì)必多一層類似jni的東西,也會(huì)在一定程度上影響運(yùn)行效率,得不償失。
再者,放著Kotlin這個(gè)在Android開發(fā)方面差不多成熟的語言(包括IDE支持,和Java無縫對(duì)接)不用跑出搞Swift,看不出有這個(gè)必要性重寫框架層?干脆重新開發(fā)一個(gè)手機(jī)操作系統(tǒng)好嗎,還有AndroidN 剛剛改入openJDK和JACK編譯器,還有搞了半天的Java虛擬機(jī),最后全部扔掉再另起爐灶是嗎,真的干脆重新寫一套操作系統(tǒng)更方便。 Swift語法有多少優(yōu)越性(和Kotlin比)而值得做出這么多的犧牲和改變呢?并沒有吧?當(dāng)然啊,最省事的可以出一個(gè)Swift on JVM啊,和舊代碼互通兩不誤,其他東西也都不用重寫有木有!那么問題又回來了,既然你要的是一個(gè)基于JVM的腳本語言(或語法類似腳本語言的語言),那么為啥要舍近求遠(yuǎn)?
唯一的理由大概就是所謂的跨平臺(tái)開發(fā)能力了,但是實(shí)際能復(fù)用多少代碼真的存疑吧,畢竟iOS和Android是兩個(gè)幾乎完全不一樣的平臺(tái)。不過Google真的不怕麻煩硬是要搞,那也算一件不錯(cuò)的事情,畢竟語言這種東西還是越統(tǒng)一越好。另外關(guān)于Kotlin現(xiàn)存的速度問題,Jetbrains已經(jīng)在改進(jìn)
而且,Swift 無法像 Kotlin 一樣與原有的 Java 生態(tài)圈交融,而單純從語法上來講(Kotlin 和 Swift 的語法有很多相似點(diǎn)),Kotlin 已經(jīng)足夠地解放了開發(fā)者的生產(chǎn)力,沒必要拋棄 Java/JVM 生態(tài)圈(各種 Android 類庫)投奔 Swift。
再說,將 Swift 作為 Firstclass langue 的工作量應(yīng)該挺大的,大概也要花上很長(zhǎng)一段時(shí)間了。至于其他答主說的 Swift compile to Java Bytecode 是不大可能的。一方面是 Swift 語法上并沒有針對(duì)JVM(/Dalvik/ART) 進(jìn)行適配,可能會(huì)產(chǎn)生一些坑(例如泛型),再者就是如果真打算這樣做的話,Google 應(yīng)該是der才不直接選擇 Kotlin。
基于以上,與其驚慌swiftfor Android,還是好好學(xué)習(xí)Android吧!就算Kotlin最可能發(fā)展起來,但別忘了,Kotlin包括IDE支持,和Java無縫對(duì)接。
傳智黑馬的講師們,深藏不露,只有在他們的傳授知識(shí)啟迪思想的過程中才能深刻領(lǐng)會(huì)~ 原因在何?因?yàn)樗麄儗?shí)則都是行業(yè)的技術(shù)精英級(jí)別的存在,他們?cè)强鐕竞蛧鴥?nèi)大中型企業(yè)架構(gòu)師、系統(tǒng)分析師、企業(yè)培訓(xùn)師! 如果你來傳智黑馬學(xué)習(xí)了,有著強(qiáng)大的師資團(tuán)隊(duì)的支撐,你不需要考慮其他的,只需要好好把技術(shù)學(xué)到手,學(xué)扎實(shí), 那么打敗其他機(jī)構(gòu)的學(xué)員,不在話下。而且傳智黑馬專注培養(yǎng)的是“既懂底層,又會(huì)開發(fā)”的Android開發(fā)者,最終可以讓學(xué)生們成為“學(xué)完即可沖擊20W年薪”。
來說說我們傳智黑馬Android最新課程改版的Android體系教程,從基礎(chǔ)到項(xiàng)目實(shí)踐,實(shí)用價(jià)值更高,內(nèi)容更廣泛,覆蓋Android移動(dòng)端開發(fā)種類,深度解析源碼和Android新特性,真正成為Android開發(fā)高手!
其他精華推薦:
1.2016年傳智/黑馬課改后最新版珍稀Android視頻精華<從基礎(chǔ)到完整項(xiàng)目流程開發(fā)>
2.[持續(xù)更新]2016最新Android視頻教程+源碼+技巧/經(jīng)驗(yàn)+軟件+面試
3.[Android] 高清視頻+詳細(xì)筆記+源碼+PPT
北京校區(qū)