華為的方舟編譯器到底是什麼,很牛逼嗎?

文章推薦指數: 80 %
投票人數:10人

前一陣子,華為P30系列發布,最為明顯的升級就是相機拍照部分,外加上P20打下的基礎,突破了自己,就算是突破了整個行業,然而從長遠的眼光看,華為P30的發布帶來的拍照提升只是例行升級,真正懂行的人都注意到了華為推出的「方舟編譯器」,也看出來了華為真正的技術實力。

​方舟編譯器簡單來說,就是可以將高級語言比如Java,直接編譯成變成機器碼的技術。

它最大的優勢就在於繞過了安卓系統的VM(虛擬機),從使得應用可以像蘋果引以為傲的iOS系統一樣,轉化出的機器碼可以直接由CPU運算,從而使得運行效率大大提升。

概括的話,什麼事都變得很簡單,為了證明方舟編譯器的技術含量,我想還是有必要詳細介紹一下它的運行原理。

​經歷過九年義務教育的我們都知道,計算機是只認識0101這樣的二進位代碼。

對於人腦來說,直接用這樣的二進位代碼來編程,顯然是不太現實的。

於是彙編語言就出現了,屬於低級語言,只是一系列的字母指令集,後來為了實現更複雜的功能,高級語言誕生了,比如C語言,Java,python等等,能夠用更短的代碼實現更複雜的功能。

​當然了高級語言計算機是無法直接讀取的,這裡就需要用到編譯器了,而編譯器就是將一種高級語言轉譯成一種低級語言的程序,起到關鍵的「承上啟下」作用,所以編譯的複雜程度直接會影響程序的執行效率,比如C語言比Java語言的執行效率高,正是因為C語言編譯出來的是CPU可以直接執行的機器碼,而Java語言則先是Java虛擬機(JVM)編譯Java語言,然後JVM再編譯成機器碼。

所以多出來的這一步就會被放大,影響到應用的運行,這也是安卓系統的應用前期卡頓的主要原因,雖然之後谷歌針對JVM做出了一系列的改進和優化,但還是難以徹底解決。

​反觀蘋果的iOS系統,直接使用Clang/LLVM來編譯出機器碼,就沒有安卓還要一個中間層那麼麻煩,所以iOS如絲滑般流暢的原因也因為如此,還有一個不可忽視的因素是閉環。

而安卓系統的底層是Linux系統搭建的,同時又因為安卓系統開源,為了解決應對不同硬體環境的適配問題,谷歌就增加了基於JIT(動態編譯)的虛擬機Dalvik,並在Dalvik虛擬機上搭建了一個JAVA應用框架,所有的安卓應用都是運行在這個虛擬機上。

​當然了谷歌也知道這樣效率不好,於是在Android 5.0版本中,使用了ART模式來替換Davlik虛擬機。

而ART是一個AOT (Ahead of Time)編譯器,是指在應用運行前就把字節碼靜態編譯成機器碼,就避免了每次打開應用都要虛擬機編譯的麻煩。

然而只是代碼的靜態編譯,Java本身的動態特性,在執行代碼過程中會有動態類的加載(就是使用輪子),而靜態編譯時無法預測會加載哪些動態類。

所以弄了半天,還是需要虛擬機的動態編譯能力。

而安卓想要像iOS那樣流暢,就必須跳過虛擬機,而方舟編譯器,解決的就是這個問題。

​根據官方信息,華為的方舟編譯器也基於AOT編譯器,不過方舟編譯器創造性地靜態編譯了動態類,把所有的Java代碼都編譯成機器碼,這樣也就可以完全避開虛擬機,直接編譯成機器碼在手機CPU上運行,也就能夠有iOS系統一樣的高效。

除了直接編譯之外,方舟編譯器也優化了編譯算法,並且在內存回收方面也有一定的改進,不僅是應用,對系統運行的流暢度也有很大的提升。

​當然了,如此重大的提升,難道谷歌就不會想到嗎。

想得到,但力不從心。

因為想要使用方舟編譯器,得從應用的打包編譯上架重新開始,開發者必須按照方舟編譯器的標準重新編譯應用安裝包,所以這並不只是安卓系統,也需要應用的配合才能使用,目前好像只有微博極速版做了適配。

當然了,華為也宣布將方舟編譯器全面開源,提供完整的編程框架和應用開發工具,將更多的開發者參與到方舟編譯器的開發和使用,共同提升整個安卓生態的體驗。

方舟編譯器編譯是基於ARM指令集開發的,所以全面開源意味著其它廠商的安卓系統也可以使用。

​這裡我們就能看出來華為對研發的投入,以及對生態的規劃,並不只是說說而已。

開開發布會賣賣手機只是小打小鬧的事情,華為的目標是全方位的生態建立。

不管你是對華為這個品牌報什麼看法,但不得不承認目前在國內只有華為有這樣的實力去做整個產業上的事,去構建屬於自己的生態,方舟編譯器就是這個過程中的催化劑。


請為這篇文章評分?


相關文章