華為方舟編譯器為什麼開源?

1 個回答
对不起我是产品经理
2019-06-16

華為方舟編譯器是建立華為自有應用生態的重要一環,需要得到廣大的應用開發者支持。

首先感謝 @六七九零七 的信任和邀請。


  朋友們好,我是系統軟件產品經理,計算機科學與技術工學碩士,“用大白話講解天馬行空的技術原理”踐行者。歡迎關注我,瞭解更多業界知識,和我一起探索數據後面的真相。

華為方舟編譯器究竟牛在哪裡

最近華為的鴻蒙系統、方舟編譯器、5G全生態設備不斷衝擊著我們的眼球,但是很多稍微細節的概念我們都不大清楚,特別是題主說的方舟編譯器,我們提起它的時候就知道它很快、很牛,是華為自己搞出來的,比原生的Android編譯器厲害。那麼方舟到底牛在哪裡呢?

華為方舟編譯器為什麼開源?

如果把安卓系統比喻一個飯館,程序代碼看做餃子,CPU看做客人,程序代碼執行的過程看作是客人在飯館吃餃子:

眾所周知,安卓系統長久以來飽受詬病的就是它的vm虛擬機模式的運行機制,為了解決這個虛擬機運行的低效問題,傳統的安卓系統運行程序代碼提出了兩種方式AOT和JIT(解釋執行的部分新版本的Android很少涉及了,這裡暫且不討論):

  • AOT就是把apk裡面所有的java代碼在程序安裝的時候都轉換成機器碼,程序執行的時候直接執行機器碼,這樣做的效果是程序執行速度高了,代價是代碼的體積變大,每次系統更新之後要重新生成所有的程序代碼;這個過程就好比客人來吃飯,飯店提前包好了很多餃子,這些餃子佔用了很多庫存空間,如果飯店裝修就要把這些餃子重新包一遍。

  • JIT就是apk裡的java代碼在運行時臨時轉換成機器碼,這樣做的問題很明顯,效率太低;這個過程就好比客人已經來了,餃子需要現包現做,雖然客人很有耐心,但是後廚忙壞了。

方舟編譯器就繞過了這兩個過程,在程序打包成apk的時候,就已經把java代碼編譯成機器碼了,安裝到系統之後,可以直接執行,不需要vm參與;這個過程就好比飯店本身不用包餃子,都是冷鏈直送的成品。客人來了下鍋一煮就OK了。

華為方舟編譯器為什麼開源?

此外,傳統的Android開發模式涉及到多種語言代碼的變量共享,這樣一來,vm在解釋運行的時候不得不頻繁暫停來確定變量的位置,這個過程也會降低性能;這個過程類似客人吃飯的時候總是跑到鄰桌去借個醬油啊借個醋啊什麼的,吃飯的過程總被打斷。

而方舟編譯器可以在程序開發環境就將不同語言統一編譯成一套機器語言,變量的互訪都是在一個空間下。這個過程類似把所有的客人都安排到一張大桌子上,不用再來回的借醬油借醋了。

通過這些過程,方舟達到了系統的高性能。

華為方舟編譯器為什麼開源?


方舟開源的目的

4月27日,華為EMUI軟件溝通會上CBG軟件部總裁王成錄詳細介紹了方舟編譯器,並且明確表示華為下一步要做的工作就是推動生態建立。那麼編譯器在整個軟硬件生態鏈中處於一個連接硬件和軟件的橋樑的位置,需要眾多的終端廠商、開發者根據編譯器的特性來做技術支持。

  • 首先,編譯器的目標平臺是硬件系統,所以需要硬件廠商不斷反饋意見,開源有利於更多的硬件產商根據方舟編譯器做出硬件設計上的調整來適配,或者修改方舟編譯器的代碼,來適配已有的硬件,這樣一來,有利於推動華為軟硬件生態的普及。

華為方舟編譯器為什麼開源?
  • 其次,編譯器的使用者是軟件開發者,開發者的app也需要根據編譯器的工作原理來對自己的app進行性能優化(比如多語言聯合開發的性能優化),有對編譯器源代碼進行研究的強烈需求。

華為方舟編譯器為什麼開源?
  • 第三,華為推動的不僅僅是一個編譯器,而是整個生態的佈局。Google已經被Android碎片化的現狀折磨得筋疲力盡,已經轉向Fushia的研發,那麼方舟編譯器以及鴻蒙系統就是國內眾廠商脫離Android依賴的一個良機。開源方舟編譯器更有利於眾廠商擺脫Android的依賴。

  • 第四,華為利用方舟編譯器在做一個大的佈局,在ICT領域的產品太多,涉及到的硬件也非常多,如果能利用開源方舟的機遇打造一個華為標準,那麼在ICT領域基本上就沒有什麼可以撼動華為的老大地位了。

如果覺得我說的對你有幫助,還請動動小手點個贊、加個關注: )
歡迎朋友們在評論中發表自己的觀點。

相關推薦

推薦中...