超重磅!華為「方舟編譯器」原始碼宣布開源,鴻蒙OS即將迎來開源時代

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

超級重磅!

8 月 31 日,華為開源了方舟編譯器的原始碼,與此同時方舟編譯器的開源官網也正式上線。

作為鴻蒙OS的重要組成部分,「方舟」的開源,也意味著鴻蒙OS的開源不遠矣!

此次公布方舟編譯器框架源碼後,華為預計將於2020年及以後實現方舟編譯器工具鏈完整開源。

圖片來源:華為官方發布(下同)

今年 4 月,華為在發布 P30 系列手機時推出了「方舟編譯器」,它隨著 EMUI 9.1 一同放出。

華為表示它能夠改善安卓應用編譯效率,讓 APP 從原先的邊解釋邊執行轉變為全程機器碼高效運行程序。

官方網站:https://www.openarkcompiler.cn

代碼託管網站:

https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler

根據官網信息,方舟編譯器是為支持多種程式語言、多種晶片平台的聯合編譯、運行而設計的統一編程平台,包含編譯器、工具鏈、運行時等關鍵部件。

方舟編譯器還在持續演進中,陸續將上述能力實現和開源。

華為開源文檔表示,當前方舟編譯器支持 Java/Kotlin 程序字節碼的前端輸入,其它程式語言的支持(如 C/C++/JS 等)還在規劃中。

方舟編譯器的中間表示(IR)轉換器將前端輸入轉換成方舟 IR,並輸送給後端的優化器,最終生成二進位文件,二進位文件與編譯器運行時庫文件連結生成可執行文件,在方舟的運行環境中就可執行該文件。

目前方舟編譯器的原始碼已經都放出來了,但並沒有在 GitHub 開源。

如下所示為開原始碼的介面,裡面包含了眾多代碼和文檔等文件。

華為CBG軟體部總裁王成錄介紹:華為2009年就開始為編譯器做準備,2013年有了自己的編譯器HCC,2014年引入了Fred Chow等技術大牛,來做華為編譯器的主架構。

此後,2012年實驗室成立了編譯器與程式語言實驗室,今年4月推出了方舟編譯器。

編譯器是一種語言(通常為高級語言)翻譯為另一種語言(通常為低級語言)的程序,可以將原始碼翻譯成可以被計算機或虛擬機執行的代碼。

華為方舟編譯器可供開發者,在開發環境一次性將高級語言編譯為機器碼,可以讓手機安裝的APP運行效率明顯提升。

相比於安卓原生系統,方舟編譯器可以明顯提升系統運行效率。


首先,它是多語言聯合優化編譯器,消除跨語言調用開銷,這是影響Android性能消耗較大的核心原因之一。


其次,把虛擬機去掉了,內存回收機制。

虛擬機可以幫助安卓系統適配各種處理器,實現跨平台操作,但也會占用額外的系統資源。

華為宣稱,方舟編譯器可將安卓應用流暢度最高提升60%。

據華為實驗室測試數據,EMUI 9.1在僅僅對系統組件System Server應用了華為方舟編譯器後,系統操作流暢度提升24%,系統響應性能提升44%。

新浪微博極速版是第一款採用方舟編譯器的第三方應用,操作流暢度提升60%。

據36Kr報導,談及華為之所以要做方舟編譯器,王成錄解釋:

「由於安卓的開放性,對上層應用沒有強制規則。

比如安卓的第三方應用市場非常多,數量無法統計;安卓的安裝方式也非常多,通過郵件都可以安裝,由此帶來的問題比較多。

所以安卓用戶要真正能夠獲得好的體驗,手機廠家只把手機(硬體)做好是不夠的,(還需要對軟體進行提升)。

值得一提的是,華為在國內EMUI在歷代版本的更新當中,除了Linux的安卓內核外,已逐步把安卓系統的很多部分替代了。

方舟編譯器也是其中關鍵步驟之一,取代了安卓原生系統虛擬機的位置。

華為此舉,可以認為是將安卓系統過渡到自研系統的鋪墊。

在華為最新發布的EMUI 10當中,已經具備了很多與鴻蒙相似的優點,包括硬體能力互助共享、一次開發多端部署等等。

如果未來進一步把Linux內核替代為鴻蒙內核,在國內市場實現平穩遷移並非不可能。

華為發布會資料圖

CSDNnews最新刊發,上海鑒釋科技創始人、前華為人、原方舟編譯器立項負責人之一梁宇寧表示,這兩天華為的方舟編譯器正式開源引起了國內媒體的很大反響,比在三月份產品發布會時發布還更激烈;而方舟本身亮點也是非常地多!

編程技術和晶片以及作業系統的關

作者 | 梁宇寧

首先來普及一下,編譯器,是把各程式語言的程序編譯成可以在各個不同晶片運行的指令集機器碼。

所以編譯器是和程式語言有關,又和晶片有關的。

後來,業界慢慢就引入一個術語:編程技術,它是一個技術範圍的總述大概包括程式語言,編譯器和程序分析/連接/操作等有關技術,目的讓程序在晶片跑的更快耗資源最少。

對於晶片來說,作業系統無非就是一堆不停在跑的程序。

如果要一個作業系統高效,他的設計必須和他的晶片或多或少有更密切的關聯,而這些關聯就是用編譯器去達成的,就是負責把程序原始碼根據晶片的設計去做最大化優化。

淺而易見,如果只有晶片和作業系統,而沒有編程技術是明顯不夠的。

舉個例子,蘋果是有自己A系列晶片和微內核Darwin基礎上iOS作業系統,和編程技術如SWIFT程式語言,LLVM編譯框架基礎上的SWIFT語言SWIFTC, 和C/C++/ObjectiveC語言的CLANG編譯器等。

同樣谷歌/Intel/AMD/NVidia/Microsoft也有這些能力。

因為華為一直是對技術非常有追求的一個公司,也是他的產品在世界上有競爭力的原因,華為手機的技術一直是以蘋果手機對標的,自然而然,華為就要構造這些能力從晶片,作業系統到編程技術。

蘋果手機的流暢度是公認的,而且如果安卓手機要達到這樣的流暢度會需要更多的硬體資源。

這歸咎於蘋果採用的編程技術和安卓的不一樣,如程式語言,SWIFT/C/C++/ObjectiveC靜態語言就有硬體資源要求小天生的優點。

但是世界上沒有免費的午餐,這些語言要求工程師編程能力要強一點和繁瑣一點,從而去規避他們的缺陷如手動或半自動釋放資源。

安卓用的是有名的資源浪費的程式語言Java,但是要求編程能力不高達到快速開發。

2015年,谷歌在安卓上決定上Java已經很多年通用的預編譯技術(AOT),但是我們發現安卓的實現沒有以前SUN在SPARC晶片上做的好,原因之一是谷歌不做手機晶片,沒法和晶片結合設計。

再說,也許浪費硬體資源,可以給晶片廠商帶來產業的不斷升級和收入,如CPU頻率增大/核數增多,快閃記憶體/內存的增多。

但是對手機廠商就不是一件好事,因為同一的用戶體驗,要更加高價的硬體成本來達到。

再說但是隨著半導體生產工藝的瓶頸摩爾定律失效,軟體和硬體聯同設計就避不開成了競爭力的保證。

那麼?方舟編譯器的本質和目的是什麼呢?

如上所述,為了對標蘋果,當初的目的是為了省內存和快閃記憶體,從而有相應性能提高,而首先嘗試改變安卓上的採用編程技術,再來實現軟體和硬體聯同設計,如CPU的流水線和特有指令等。

從方舟編譯器的開源,就可以很清晰的看到,當初決定的技術方向,就是把動態語言特性靜態化在運行前預處理,這還是屬於AOT範圍,但是比SUN當時在Java上做的AOT激進:

  • 把Java的字節碼預編譯成機器碼,當然有華為自己的IR為編譯轉換和優化所用;

  • 把Java的內存垃圾管理GC改成和蘋果自動引用計數ARC一樣。

這是不包含傳統編譯器:

  • Java程式語言解析器,負責把Java程序原始碼轉換成Java的字節碼;

  • 生成的機器碼還是ARM 標準的指令集,沒有華為晶片特定的指令;

  • 沒有自己連結器,所以沒有對應的優化。

(註:具體技術細節和實現請研究方舟編譯器開源網站)

可以這樣理解:目前,方舟編譯器已經是中國第一個能把部分核心技術自研出來並大規模商用的嘗試,有著深遠的意義。

作者:你髮姐

編輯:楊燊

監製:王俊稷

來源:華為官網、機器學習研究會訂閱號、 CSDN、36Kr

「第一財經廣播」


請為這篇文章評分?


相關文章 

華為方舟編譯器8月將開源 鴻蒙系統快來了

今年四月份的華為 P30系列發布會上,華為公司宣布了革命性的「方舟編譯器」,其通過架構級優化,可以顯著提升性能。「方舟編譯器」全程執行機器碼,解決了安卓系統應用「邊解碼邊執行」造成的低效率問題,...