前一陣子,華為P30系列發(fā)布,,最為明顯的升級就是相機拍照部分,,外加上P20打下的基礎(chǔ),突破了自己,就算是突破了整個行業(yè),,然而從長遠的眼光看,,華為P30的發(fā)布帶來的拍照提升只是例行升級,真正懂行的人都注意到了華為推出的“方舟編譯器”,,也看出來了華為真正的技術(shù)實力,。
方舟編譯器簡單來說,就是可以將高級語言比如Java,,直接編譯成變成機器碼的技術(shù),。它最大的優(yōu)勢就在于繞過了安卓系統(tǒng)的VM(虛擬機),從使得應(yīng)用可以像蘋果引以為傲的iOS系統(tǒng)一樣,,轉(zhuǎn)化出的機器碼可以直接由CPU運算,,從而使得運行效率大大提升。
概括的話,,什么事都變得很簡單,,為了證明方舟編譯器的技術(shù)含量,我想還是有必要詳細介紹一下它的運行原理,。
經(jīng)歷過九年義務(wù)教育的我們都知道,計算機是只認識0101這樣的二進制代碼,。對于人腦來說,,直接用這樣的二進制代碼來編程,顯然是不太現(xiàn)實的,。于是匯編語言就出現(xiàn)了,,屬于低級語言,只是一系列的字母指令集,,后來為了實現(xiàn)更復(fù)雜的功能,,高級語言誕生了,比如C語言,,Java,,python等等,能夠用更短的代碼實現(xiàn)更復(fù)雜的功能,。
當然了高級語言計算機是無法直接讀取的,,這里就需要用到編譯器了,而編譯器就是將一種高級語言轉(zhuǎn)譯成一種低級語言的程序,,起到關(guān)鍵的“承上啟下”作用,,所以編譯的復(fù)雜程度直接會影響程序的執(zhí)行效率,比如C語言比Java語言的執(zhí)行效率高,,正是因為C語言編譯出來的是CPU可以直接執(zhí)行的機器碼,,而Java語言則先是Java虛擬機(JVM)編譯Java語言,然后JVM再編譯成機器碼,。所以多出來的這一步就會被放大,,影響到應(yīng)用的運行,,這也是安卓系統(tǒng)的應(yīng)用前期卡頓的主要原因,雖然之后谷歌針對JVM做出了一系列的改進和優(yōu)化,,但還是難以徹底解決,。
反觀蘋果的iOS系統(tǒng),直接使用Clang/LLVM來編譯出機器碼,,就沒有安卓還要一個中間層那么麻煩,,所以iOS如絲滑般流暢的原因也因為如此,還有一個不可忽視的因素是閉環(huán),。而安卓系統(tǒng)的底層是Linux系統(tǒng)搭建的,,同時又因為安卓系統(tǒng)開源,為了解決應(yīng)對不同硬件環(huán)境的適配問題,,谷歌就增加了基于JIT(動態(tài)編譯)的虛擬機Dalvik,,并在Dalvik虛擬機上搭建了一個JAVA應(yīng)用框架,所有的安卓應(yīng)用都是運行在這個虛擬機上,。
當然了谷歌也知道這樣效率不好,,于是在Android 5.0版本中,使用了ART模式來替換Davlik虛擬機,。而ART是一個AOT(Ahead of Time)編譯器,,是指在應(yīng)用運行前就把字節(jié)碼靜態(tài)編譯成機器碼,就避免了每次打開應(yīng)用都要虛擬機編譯的麻煩,。然而只是代碼的靜態(tài)編譯,,Java本身的動態(tài)特性,在執(zhí)行代碼過程中會有動態(tài)類的加載(就是使用輪子),,而靜態(tài)編譯時無法預(yù)測會加載哪些動態(tài)類,。
所以弄了半天,還是需要虛擬機的動態(tài)編譯能力,。而安卓想要像iOS那樣流暢,,就必須跳過虛擬機,而方舟編譯器,,解決的就是這個問題,。
根據(jù)官方信息,華為的方舟編譯器也基于AOT編譯器,,不過方舟編譯器創(chuàng)造性地靜態(tài)編譯了動態(tài)類,,把所有的Java代碼都編譯成機器碼,這樣也就可以完全避開虛擬機,,直接編譯成機器碼在手機CPU上運行,,也就能夠有iOS系統(tǒng)一樣的高效。除了直接編譯之外,方舟編譯器也優(yōu)化了編譯算法,,并且在內(nèi)存回收方面也有一定的改進,,不僅是應(yīng)用,對系統(tǒng)運行的流暢度也有很大的提升,。
當然了,,如此重大的提升,難道谷歌就不會想到嗎,。想得到,,但力不從心。因為想要使用方舟編譯器,,得從應(yīng)用的打包編譯上架重新開始,,開發(fā)者必須按照方舟編譯器的標準重新編譯應(yīng)用安裝包,所以這并不只是安卓系統(tǒng),,也需要應(yīng)用的配合才能使用,,目前好像只有微博極速版做了適配。
當然了,,華為也宣布將方舟編譯器全面開源,,提供完整的編程框架和應(yīng)用開發(fā)工具,將更多的開發(fā)者參與到方舟編譯器的開發(fā)和使用,,共同提升整個安卓生態(tài)的體驗,。方舟編譯器編譯是基于ARM指令集開發(fā)的,所以全面開源意味著其它廠商的安卓系統(tǒng)也可以使用,。
這里我們就能看出來華為對研發(fā)的投入,以及對生態(tài)的規(guī)劃,,并不只是說說而已,。開開發(fā)布會賣賣手機只是小打小鬧的事情,華為的目標是全方位的生態(tài)建立,。不管你是對華為這個品牌抱什么看法,,但不得不承認目前在國內(nèi)只有華為有這樣的實力去做整個產(chǎn)業(yè)上的事,去構(gòu)建屬于自己的生態(tài),,方舟編譯器就是這個過程中的催化劑,。