首頁>科技>

​30日,餘承東在微博宣佈,方舟編譯器將於8月31日開源。自從今年4月在釋出會上亮相後,終於開始真正面向福斯。那到底方舟編譯器的開源會給我們帶來什麼影響,方舟本身又有什麼優勢呢,下面跟著小編一起揭開這層面紗。

重要的時間線

2009年,開始建立編譯組,第一批海內外研究人員加入,這便是方舟萌芽最初始的團隊。2013年,正式提出編譯器框架構想,這便是方舟的前身。2014年,方舟專案啟動,大批清華、中科院博士加入,其中有在海外的周志德(Fred Chow)。2016年,成立編譯器與程式語言實驗室。2017年5月,方舟編譯器上的第一個 Java 程式 “HelloWorld” 跑通。2017年8月,華為方舟跑通了第一個安卓後臺服務DiskStatus。2018年春節前一週,方舟編譯器跑通 Android 系統所有後臺服務,併成功移植到手機。2018年除夕前夜,啟動方舟編譯手機的Beta測試。2019年4月,華為方舟編譯器在 P30 系列的國內釋出會上對外宣佈。2019年8月,華為方舟編譯器部分開源

方舟的實質效果

從時間線我們可以看到,方舟最初從一個編譯組團隊開始,隨後變成了實驗室。方舟專案最初由一個編譯器架構衍生出來,最後逐漸壯大,直到編譯第一個Java程式,跑通第一個安卓服務,編譯出第一個手機應用,一路勢如破竹,一戰成名。

由這個路徑可以看到,方舟最終是應用到手機上的,特別是在安卓手機上。同樣的程式碼,經過方舟編譯後,操作流暢度有顯著的提升。在華為自己的P30手機上,使用方舟編譯後的安卓後臺服務,提升手機系統操作流暢度高達24%,系統響應效能提升44%。下面是一個直觀的對比圖。

是不是速度快了很多,這就是技術的力量。同時說個題外話,支付寶本週更新了一個版本,達到了應用秒開,很多人瞬間就想到是不是方舟編譯器的功勞,後來支付寶迴應說,是自己對架構做了優化,並非使用了方舟。

如何點石成金

看到了P30這麼流暢的速度,是不是很心動呢。但既然是方舟的功勞,也就是說我們不必都買P30,只要方舟開源,利用方舟編譯同樣的應用,就能讓載入速度有顯著的提升。但同時也有人問,既然有方法能讓速度更快, 那為什麼沒有人早點做出來呢,甚至是谷歌自己也不對安卓系統做優化呢,這個就得從編譯技術說起了。

計算機的世界裡只有二進位制0和1,而人類對於這種枯燥的數字敏感度極低,所以發明了高階程式語言,用近似人類的語言來組織程式。編譯器就是將高階語言轉換成計算機二進位制語言的工具。方舟編譯器就是將程式設計師用Java寫的程式轉換成計算機語言的工具。但是和安卓原來的編譯器比,為什麼速度會變快呢,這又得從安卓系統的特殊性說起了。

安卓源自於Linux核心,而Linux是用C/C++語言開發的系統,為什麼安卓用Java編譯也能執行起來?因為安卓為了能夠執行Java程式,在系統呼叫前經過了一個虛擬機器,虛擬機器就像一個翻譯,使Java語言和C語言也能互通。安卓使用Java作為開發語言,真是成也蕭何敗蕭何,依靠眾多的Java使用者,和Java本身的高階語言特性,使得安卓的開發門檻降低,一下湧現眾多開發者,也使安卓從0開始的生態,短時間內就擁有的眾多的應用數量。但經過虛擬機器這樣的“翻譯”,也意味著執行效率降低了。谷歌對這件事自然也是清楚的,從第一代的Dalvik虛擬機器,到後來的JIT機制,再到ART,再到安卓7.0的混合編譯,安卓的流暢度在逐步上升。

而方舟在優化這條路上,走的是另外一條路線。首先,Java號稱跨平臺,一次編譯多處執行,靠的就是虛擬機器。雖然在不同的硬體平臺上執行,但有虛擬機器這樣的中轉站,所以可以無視硬體而執行。而首先方舟去掉的就是虛擬機器。要想讓Java直接去掉虛擬機器而執行,是有很多技術上的問題的,這裡就不展開了。但通過方舟實驗室多年的努力,克服種種難關,終於把這個問題解決了,最終方舟編譯出來的應用是不執行在虛擬機器上的。去掉虛擬機器後執行速度之快是不言自明的,但也會帶來一個問題,這個應用不能在不同的手機運行了。如果手機使用的晶片方案不同,那麼程式設計師得根據不同的手機編譯不用的應用,而且應用商店也得根據手機的不同,提供不同的安裝包。好吧,就是程式設計師多累一點,對使用者來說,完全沒增加什麼操作。

另外,方舟優化了安卓記憶體回收機制,可以消除原來的莫名卡頓。

船來了

從官方宣傳來說,方舟走的是這四步:

幹掉虛擬機器幹掉混合語言呼叫的開銷編譯時程式碼優化使用新的記憶體回收機制

可以看到,方舟已經不僅僅是一個編譯器,更是一個編譯執行系統。

隨著方舟的開源,會有更多的人為這個系統添磚加瓦,到時手機移動應用也會迎來一個新的時代,我們一起拭目以待吧。

  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • IOS13.1.1正式版推送/在價格相近面前,大家還是認為蘋果比華為香