華為方舟編譯器正式開源:脫離GitHub實現(xiàn)自主托管
近日,華為的方舟編譯器終于迎來了開源,而且開源代碼還是承載在自家的官網(wǎng)上。面對這樣一個肩負「出于安卓,勝于安卓」使命的編譯器,自問世以來就備受大家的關注;此次開源,更是吸引了大眾的目光。
那么到底這個編譯器從開發(fā)至今都經歷了哪些挑戰(zhàn)?獲得了哪些機遇?現(xiàn)在又擁有怎樣的魔力?它對于華為而言,意味著什么?特此,雷鋒網(wǎng) AI 開發(fā)者將華為方舟編譯器相關內容整理及編輯如下。
十年磨劍,華為「方舟」
為了造這艘「方舟」,華為磨劍十年。
2009 年,華為啟動 5G 基礎技術研究的同時,開始創(chuàng)建編譯組,第一批海內外研究人員加入。
2013 年,華為推出面向基站領域的自研編譯器 HCC,并正式提出編譯器框架構想。
2014 年,眾多海內外專家加入華為,方舟項目正式啟動。
2016 年,成立編譯器與編程語言實驗室。
2019 年,華為方舟編譯器正式面世。
據(jù)華為官方介紹,方舟編譯器是為支持多種編程語言、多種芯片平臺的聯(lián)合編譯、運行而設計的統(tǒng)一編程平臺,包含編譯器、工具鏈、運行時等關鍵部件。它是首個完全替代語言虛擬機的靜態(tài)編譯器,并且完全不需要解釋器,同時還兼顧 Java 開發(fā)效率和 C 語言運行效率。
8 月 31 日下午 17 時,方舟編譯器開源官網(wǎng)上線—;—;OpenArkCompiler(開源方舟編譯器),開放了框架源碼,開發(fā)者們可以下載源代碼包,了解熟悉方舟編譯器的架構思想。
OpenArkCompiler 介紹
面向多設備、支持多語言的統(tǒng)一編程平臺。
OpenArkCompiler 是來自華為方舟編譯器的開源項目。
OpenArkCompiler 四個技術特點
能能夠將不同語言代碼編譯成一套可執(zhí)行文件,在運行環(huán)境中高效執(zhí)行:
支持多語言聯(lián)合優(yōu)化、消除跨語言調用開銷;
更輕量的語言運行時;
軟硬協(xié)同充分發(fā)揮硬件能效;
支持多樣化的終端設備平臺
開源計劃
編編譯器框架代碼開源
OpenArkCompiler 開源范圍
編譯器 IR+中端語言實現(xiàn)
OpenArkCompiler 開放能力
框架開源供參考學習,了解方舟編譯器架構及框架代碼
開發(fā)者可構建出完整編譯器工具鏈,支持 Java Sample 程序編譯(非應用)
脫離GitHub,自主托管
目前方舟編譯器的源代碼已經都放出來了,但并沒有在 GitHub 開源。目前方舟編譯器的代碼托管在華為云與碼云平臺(https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler/home),在未來走向開放治理以后,將按照所掛靠機構的模式來托管。如下所示為開源代碼的界面,里面包含了眾多代碼和文檔等文件。
方舟開源代碼界面
本次方舟編譯器開源的是編譯器框架部分源碼,包括編譯器中間表示(IR,Intermediate Representation)和語言編譯實現(xiàn),同時搭配編譯器其他二進制組件,實現(xiàn) Java 程序到 aarch64 匯編指令的編譯過程。開發(fā)者可基于開源代碼+二進制,編譯構建出編譯器工具鏈,嘗試對 Java 程序進行編譯。
社區(qū)參與者可以通過框架源碼學習方舟編譯器的編譯器中間表示(IR)及基本的中端編譯框架,熟悉方舟編譯器的架構思想,并參與諸如對編譯器中端優(yōu)化的貢獻。開發(fā)者則可通過代碼托管平臺參與社區(qū)貢獻,包括文檔貢獻和代碼貢獻,同時也可在此平臺上反饋相關問題和需求。
方舟編譯器當前開源范圍
盡管方舟編譯器暫時只支持 Java 和 Kotlin 程序輸入,但官方消息稱,方舟編譯器還在持續(xù)演進中,也將陸續(xù)實現(xiàn)更多功能的開源。根據(jù)之前華為在開發(fā)者大會上公布的信息,作為鴻蒙 OS 的重要工具,方舟編譯器從 2019 年 8 月開始,將分步驟持續(xù)進行開源。具體的開源計劃如下:
2020 年:開始開源 Java 編譯器工具鏈,支持 Java 程序編譯。
2021 年:開始開源 JavaScript 編譯器工具鏈,可用于 JS 程序的編譯。
架構示意圖
方舟編譯器架構示意圖
當前方舟編譯器支持 Java/Kotlin 程序字節(jié)碼的前端輸入,其它編程語言的支持(如 C/C++/JS 等)還在規(guī)劃中,方舟編譯器的中間表示(IR)轉換器將前端輸入轉換成方舟 IR,并輸送給后端的優(yōu)化器,最終生成二進制文件,二進制文件與編譯器運行時庫文件鏈接生成可執(zhí)行文件,在方舟的運行環(huán)境中就可執(zhí)行該文件。
方舟編譯器 IR 是支持程序編譯和運行的中間程序表示。程序源代碼中的任何信息對于程序分析和優(yōu)化都是有幫助的,所以方舟 IR 的目標是盡可能完整詳細地提供源程序的信息。關于方舟編譯器 IR 的詳細信息,可以參考(https://www.openarkcompiler.cn/document/frameworkDesgin)。
左秒虛擬機,右殺 JNI
華為宣稱,方舟編譯器可將安卓應用流暢度最高提升 60%,提升手機系統(tǒng)操作流暢度高達 24%,系統(tǒng)響應性能提升 44%。
根據(jù)華為實驗數(shù)據(jù),EMUI 9.1 在僅僅對系統(tǒng)組件 System Server 應用了華為方舟編譯器后,系統(tǒng)操作流暢度提升 24%,系統(tǒng)響應性能提升 44%。新浪微博極速版是第一款采用方舟編譯器的第三方應用,操作流暢度提升 60%。
「出于安卓,勝于安卓,超越 iOS,并且全面兼容安卓」,是方舟編譯器的使命。目前,方舟已經可以實現(xiàn)「混合語言的統(tǒng)一中間表示和完全靜態(tài)編譯」。這也正是它主要的兩大優(yōu)點:
方舟編譯器首次在 Java 領域將虛擬機去掉了,也是軟件史上首次將 Java/C/C++等混合代碼一次編譯成機器碼直接在手機上運行,徹底告別 Java 的 JNI 額外開銷,采用內存回收機制,使操作流暢度大幅提升。
方舟編譯器用空間換性能,因此可直接將編譯器的代碼優(yōu),并化搬到了開發(fā)者環(huán)境;使得開發(fā)者不再被手機端的硬件資源所限制,為代碼優(yōu)化提供了無限可能。
我命由我不由天
正如華為自己所寫:「方舟編譯器開源打響了鴻蒙 OS 開源的第一槍。通過持續(xù)的開放、開源,華為將把自己在軟件方面的技術能力不斷貢獻給行業(yè),同時在開源社區(qū)中,更多的開發(fā)者可以參與并貢獻自己的力量,共同推進基礎軟件的發(fā)展?!?/p>
方舟編譯器的開源并非偶然,而是華為一直精心運營的一步棋。當這步棋落下的那一刻,也代表了華為進一步實現(xiàn)技術自主權的時候;而正是這樣的獨立,才讓華為在面對美國一次又一次的強勢打壓之下,依然保持了頑強、不屈服的態(tài)度。
方舟編譯器合作第三方應用
根據(jù)官方信息,華為堅持每年將銷售收入的 10% 以上投入到研發(fā)中,技術成果不斷涌現(xiàn),軟件能力持續(xù)增強;并且在此基礎上,華為也保持著開放、合作、共贏的態(tài)度,不斷推進產業(yè)創(chuàng)新與開放生態(tài)。從官網(wǎng)的介紹,我們可以看到目前已有 46 款 APP 使用了方舟編譯器進行優(yōu)化與性能提升,其中包括我們常用的支付寶、優(yōu)酷、微博等應用。
現(xiàn)在方舟編譯器正式開源,或許也正意味著華為正在從開源領域的主要參與者變成引領者。