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