教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

來(lái)自Swift的恐慌!Swift for Android—各自入侵彼此不擅長(zhǎng)的領(lǐng)域

更新時(shí)間:2016年04月22日13時(shí)32分 來(lái)源:傳智播客 瀏覽次數(shù):

  深度解析Swift for Android傷害?



  鑒于最近各大媒體都在瘋傳Android親爹Google醞釀將swift作為未來(lái)安卓開(kāi)發(fā)的第一語(yǔ)言!Android開(kāi)發(fā)們炸了鍋?這是語(yǔ)言入侵!活生生的Swift for Android傷害!

  首先來(lái)水一水各自入侵?

  C++Java C# 這種本來(lái)就叫 general purpose language。 意思就是什么都能干,什么都能寫(xiě)。從桌面,到移動(dòng),到server。



  Swift的初衷也只是想加入這個(gè)陣營(yíng)而已,而且本身他也有加入這個(gè)陣營(yíng)的條件, server不說(shuō)。蘋(píng)果本身就已經(jīng)有了桌面和移動(dòng)著兩大平臺(tái)。

  來(lái)說(shuō)說(shuō)Android倚賴(lài)的Java,Java 設(shè)計(jì)出來(lái)的目的是為了給電冰箱發(fā)郵件,卻入侵了電腦,入侵了 Web,現(xiàn)在又入侵了 Android。同樣,JavaScript 設(shè)計(jì)出來(lái)是給網(wǎng)頁(yè)做動(dòng)態(tài)效果,現(xiàn)在入侵了服務(wù)器端(該死的nodejs),還入侵了手機(jī)App(shit react!)。Java 剛出爐的時(shí)候有三個(gè)版本,ee主要做web,se做桌面,me做嵌入式。在Java的各種書(shū)籍里大致都有提到,Java什么都能做,那么Java語(yǔ)言的發(fā)明是否傷害了其他的編程語(yǔ)言呢?還是說(shuō)為了不傷害其他編程語(yǔ)言,難道真的是為了語(yǔ)言保護(hù)而不要再發(fā)明新的編程語(yǔ)言了嗎?



  世界在發(fā)展技術(shù)在更新,抱著初衷不放、不能放開(kāi)發(fā)展開(kāi)發(fā)語(yǔ)言,那也太不炫酷了。另外,迄今為止這么多的語(yǔ)言被不斷發(fā)明和替代,市場(chǎng)和程序員會(huì)做出選擇的,so,不要替編程語(yǔ)言的命運(yùn)操心了,不管是Android開(kāi)發(fā)者還是IOS開(kāi)發(fā)者~

  除非專(zhuān)用語(yǔ)言比如Fortran/lua之類(lèi)的,否則和其他語(yǔ)言有一定的交集和競(jìng)爭(zhēng)很正常。有競(jìng)爭(zhēng)不好嗎?

  說(shuō)到底,既然某種開(kāi)發(fā)語(yǔ)言現(xiàn)在用起來(lái)舒服了,就想方設(shè)法想要擴(kuò)展它的局限性。



  比如說(shuō) Go 語(yǔ)言做 Android 程序,熟悉 C/C++ 有財(cái)力的公司,會(huì)舍棄生態(tài)鏈異常完整的 Java ,舍棄 C/C++ 攫取硬件性能的能力,選擇 Go 語(yǔ)言?為了什么?Go 語(yǔ)言的編輯的效率?得益于開(kāi)發(fā)工具,Java的編寫(xiě)效率一點(diǎn)也不慢。而用 Go 語(yǔ)言折騰一個(gè)開(kāi)發(fā)環(huán)境,又是一件費(fèi)力不討好的事。

  再者說(shuō),Swift,聽(tīng)說(shuō)它的主力開(kāi)發(fā)是LLVM 的作者。而且相對(duì)封閉,不像 Rust 廣泛聽(tīng)取社區(qū)的意見(jiàn)。所以有人說(shuō)它的未來(lái)可能更好,因?yàn)楝F(xiàn)在盛行的語(yǔ)言,所有都是1,2個(gè)人做出來(lái)的。一個(gè)社區(qū)砸進(jìn)去,不見(jiàn)的是件好事。但 Swift 真的能打敗前任,擠進(jìn)服務(wù)器市場(chǎng)嗎?



  Swift為了避免重復(fù)造輪子,對(duì) C 和 Object-C 的兼容性很好,基本可以直接調(diào)用它們寫(xiě)的庫(kù)。采用引用計(jì)數(shù)垃圾回收。但問(wèn)題是,它本身的目的是為了更傻瓜化 iOS 軟件的開(kāi)發(fā)的。它無(wú)論現(xiàn)在還是未來(lái),都會(huì)偏向這個(gè)目的。那為什么偏要用不是專(zhuān)業(yè)干這件事的工具,折騰來(lái)折騰去,來(lái)干這件事呢?

  現(xiàn)在 Swift 離開(kāi)了 iOS 平臺(tái),基本什么事都干不了。如果不調(diào)用 C 庫(kù)的話(huà)。但能調(diào)用 C 庫(kù)干這種事的語(yǔ)言太多了。它們的生態(tài)也比 Swift 完整多了。

  語(yǔ)言只是工具,對(duì)公司而言,選擇成熟的穩(wěn)定的方案遠(yuǎn)比慢慢去踩坑更佳靠譜。比如對(duì)Golang而言,定位最初還是操作系統(tǒng)語(yǔ)言呢,現(xiàn)在看起來(lái)主要的方向還是高效分布式應(yīng)用方向。Swift離開(kāi)iOS不是不可以,對(duì)外部社區(qū)的態(tài)度目前還不清楚,不過(guò)會(huì)的基本是iOS程序員,你讓他們?nèi)?xiě)服務(wù)端了,誰(shuí)來(lái)寫(xiě)iOS程序呢?

  現(xiàn)在語(yǔ)言的跨平臺(tái)跨方向應(yīng)用主要還是為了讓人員發(fā)揮更大作用,盡可能的榨干它們的價(jià)值,比如前后端分離之類(lèi)的。語(yǔ)言的應(yīng)用場(chǎng)景越多,對(duì)初創(chuàng)或者個(gè)人作坊幫助比較大,但是伴隨著體量和需求的增加,大部分還是回到老路上來(lái)(分工明確與協(xié)作)。

  關(guān)于swift談一下看法,只說(shuō)Swift本身。雖然做Android不做iOS相關(guān)的開(kāi)發(fā),但看好swift。swift語(yǔ)法相對(duì)平易近人,開(kāi)源加上蘋(píng)果的持續(xù)投入,未來(lái)類(lèi)庫(kù)和性能也不會(huì)差。掌握它一門(mén)能iOS和后端都能玩,群眾基礎(chǔ)會(huì)非常好。只要群眾基礎(chǔ)好,語(yǔ)言持續(xù)發(fā)展搞出便于前后端開(kāi)發(fā)的庫(kù)和內(nèi)置并發(fā)之類(lèi)的根本就不是事。

  前陣子看到一個(gè)評(píng)測(cè),在一些case上的性能swift甚至都超過(guò)rust了。iOS領(lǐng)域自不必說(shuō),現(xiàn)在swift開(kāi)源支持多個(gè)平臺(tái)。用swift在linux寫(xiě)寫(xiě)服務(wù)也是很自然的。未來(lái)swift在前后端都用太正常不過(guò)了。

  然而swift最大的潛在問(wèn)題就是ChrisLattner千萬(wàn)不要把它語(yǔ)法B格升的太高,一定要持續(xù)走現(xiàn)在相對(duì)樸素的路線(xiàn),過(guò)于高冷不適合廣大群眾。------------之所以這么說(shuō),是因?yàn)榉偶偾翱吹紺hris Lattner在考慮swift是否加上一些類(lèi)似于rust那種風(fēng)格的Lifetimes ,Ownership 的東東。這些東西一旦引入了,容易脫離廣大群眾。

  說(shuō)完了Swift本身,再回到主題,真能造成傷害嗎???現(xiàn)在Android開(kāi)發(fā)社區(qū)中除了Java以外,最常使用的開(kāi)發(fā)語(yǔ)言是Scala, Groovy 以及才出來(lái)的 Kotlin,他們之間有什么相同點(diǎn)呢?他們都是JVM語(yǔ)言,因此他們可以被編譯成class文件,打包成為dex文件,進(jìn)而運(yùn)行在Android 虛擬機(jī)上。



  而現(xiàn)在,假定我們使用Swift作為開(kāi)發(fā)語(yǔ)言,會(huì)遇到哪些問(wèn)題:

  第一個(gè)問(wèn)題就是已有的Android版本是不支持Swift編譯出的應(yīng)用的,Swfit本身就不是作為一種JVM語(yǔ)言開(kāi)發(fā)的,因此如果強(qiáng)行把他編譯成class文件,工作量很大。所以如果真有Swift應(yīng)用,也只能在新版本的Android系統(tǒng)中運(yùn)行,但是Android不比iOS,系統(tǒng)升級(jí)率那是相當(dāng)?shù)牡?,我想沒(méi)有任何一個(gè)開(kāi)發(fā)者會(huì)愿意拋棄老版本的Android用戶(hù)。

  第二個(gè)問(wèn)題就是Android的生態(tài)環(huán)境,Android從09開(kāi)始發(fā)布,到現(xiàn)在已經(jīng)7年了,各種開(kāi)源社區(qū)和開(kāi)源項(xiàng)目都是圍繞著Java語(yǔ)言進(jìn)行開(kāi)發(fā),就算是Scala,Groovy和Kotlin也是能夠直接調(diào)用Java代碼。如果選用了Swift,如果完全拋棄現(xiàn)有的開(kāi)源項(xiàng)目框架,成本很高,但如果需要直接操作Java代碼,勢(shì)必多一層類(lèi)似jni的東西,也會(huì)在一定程度上影響運(yùn)行效率,得不償失。

  再者,放著Kotlin這個(gè)在Android開(kāi)發(fā)方面差不多成熟的語(yǔ)言(包括IDE支持,和Java無(wú)縫對(duì)接)不用跑出搞Swift,看不出有這個(gè)必要性重寫(xiě)框架層?干脆重新開(kāi)發(fā)一個(gè)手機(jī)操作系統(tǒng)好嗎,還有AndroidN 剛剛改入openJDK和JACK編譯器,還有搞了半天的Java虛擬機(jī),最后全部扔掉再另起爐灶是嗎,真的干脆重新寫(xiě)一套操作系統(tǒng)更方便。 Swift語(yǔ)法有多少優(yōu)越性(和Kotlin比)而值得做出這么多的犧牲和改變呢?并沒(méi)有吧?當(dāng)然啊,最省事的可以出一個(gè)Swift on JVM啊,和舊代碼互通兩不誤,其他東西也都不用重寫(xiě)有木有!那么問(wèn)題又回來(lái)了,既然你要的是一個(gè)基于JVM的腳本語(yǔ)言(或語(yǔ)法類(lèi)似腳本語(yǔ)言的語(yǔ)言),那么為啥要舍近求遠(yuǎn)?

  唯一的理由大概就是所謂的跨平臺(tái)開(kāi)發(fā)能力了,但是實(shí)際能復(fù)用多少代碼真的存疑吧,畢竟iOS和Android是兩個(gè)幾乎完全不一樣的平臺(tái)。不過(guò)Google真的不怕麻煩硬是要搞,那也算一件不錯(cuò)的事情,畢竟語(yǔ)言這種東西還是越統(tǒng)一越好。另外關(guān)于Kotlin現(xiàn)存的速度問(wèn)題,Jetbrains已經(jīng)在改進(jìn)



  而且,Swift 無(wú)法像 Kotlin 一樣與原有的 Java 生態(tài)圈交融,而單純從語(yǔ)法上來(lái)講(Kotlin 和 Swift 的語(yǔ)法有很多相似點(diǎn)),Kotlin 已經(jīng)足夠地解放了開(kāi)發(fā)者的生產(chǎn)力,沒(méi)必要拋棄 Java/JVM 生態(tài)圈(各種 Android 類(lèi)庫(kù))投奔 Swift。

  再說(shuō),將 Swift 作為 Firstclass langue 的工作量應(yīng)該挺大的,大概也要花上很長(zhǎng)一段時(shí)間了。至于其他答主說(shuō)的 Swift compile to Java Bytecode 是不大可能的。一方面是 Swift 語(yǔ)法上并沒(méi)有針對(duì)JVM(/Dalvik/ART) 進(jìn)行適配,可能會(huì)產(chǎn)生一些坑(例如泛型),再者就是如果真打算這樣做的話(huà),Google 應(yīng)該是der才不直接選擇 Kotlin。

  基于以上,與其驚慌swiftfor Android,還是好好學(xué)習(xí)Android吧!就算Kotlin最可能發(fā)展起來(lái),但別忘了,Kotlin包括IDE支持,和Java無(wú)縫對(duì)接。



  傳智黑馬的講師們,深藏不露,只有在他們的傳授知識(shí)啟迪思想的過(guò)程中才能深刻領(lǐng)會(huì)~ 原因在何?因?yàn)樗麄儗?shí)則都是行業(yè)的技術(shù)精英級(jí)別的存在,他們?cè)强鐕?guó)公司和國(guó)內(nèi)大中型企業(yè)架構(gòu)師、系統(tǒng)分析師、企業(yè)培訓(xùn)師! 如果你來(lái)傳智黑馬學(xué)習(xí)了,有著強(qiáng)大的師資團(tuán)隊(duì)的支撐,你不需要考慮其他的,只需要好好把技術(shù)學(xué)到手,學(xué)扎實(shí), 那么打敗其他機(jī)構(gòu)的學(xué)員,不在話(huà)下。而且傳智黑馬專(zhuān)注培養(yǎng)的是“既懂底層,又會(huì)開(kāi)發(fā)”的Android開(kāi)發(fā)者,最終可以讓學(xué)生們成為“學(xué)完即可沖擊20W年薪”。



  來(lái)說(shuō)說(shuō)我們傳智黑馬Android最新課程改版的Android體系教程,從基礎(chǔ)到項(xiàng)目實(shí)踐,實(shí)用價(jià)值更高,內(nèi)容更廣泛,覆蓋Android移動(dòng)端開(kāi)發(fā)種類(lèi),深度解析源碼和Android新特性,真正成為Android開(kāi)發(fā)高手!


  其他精華推薦:


  1.2016年傳智/黑馬課改后最新版珍稀Android視頻精華<從基礎(chǔ)到完整項(xiàng)目流程開(kāi)發(fā)>

  2.[持續(xù)更新]2016最新Android視頻教程+源碼+技巧/經(jīng)驗(yàn)+軟件+面試

  3.[Android] 高清視頻+詳細(xì)筆記+源碼+PPT


0 分享到:
和我們?cè)诰€(xiàn)交談!