昨日,華為方舟編譯器開源官網(wǎng)正式上線,代碼沒有放在GitHub,而是放到了開源中國的碼云上。此次方舟編譯器的開源打響了鴻蒙OS開源的第一槍,未來將有更多開源陸續(xù)放出。
Show you the code! 8月31日,華為方舟編譯器開源官網(wǎng)正式上線,余承東也在微博上公布了相關(guān)消息。
方舟編譯器是為支持多種編程語言、多種芯片平臺的聯(lián)合編譯、運(yùn)行而設(shè)計的統(tǒng)一編程平臺,包含編譯器、工具鏈、運(yùn)行時等關(guān)鍵部件。
方舟編譯器整體框架
值得關(guān)注的是,此次方舟代碼沒有放在GitHub,而是放到華為自建的開源平臺,以及開源中國的碼云上,目前已收獲876顆星。
官方網(wǎng)站: https://www.openarkcompiler.cn 代碼托管網(wǎng)站: https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler 碼云鏡像倉庫地址: https://gitee.com/harmonyos/OpenArkCompiler
鴻蒙OS開源第一槍,更多開源陸續(xù)放出
此次方舟編譯器的開源打響了鴻蒙OS開源的第一槍,首次開源范圍是編譯器 IR( Intermediate Representation)、RC(Reference Counting)和多語言設(shè)計思想等,用于與業(yè)界、學(xué)術(shù)界溝通交流。
后續(xù)將陸續(xù)開源編譯器前端、后端,支持其它語言(如 JavaScript)的編譯等,當(dāng)前部分Java語言特性和JVM虛擬機(jī)特性的支持未包括在本次開源代碼中,包括:annotation、lambda表達(dá)式、泛型等。
華為消費(fèi)者 BG 軟件部總裁王成錄表示方舟編譯器代碼會陸續(xù)開源 根據(jù)之前華為在開發(fā)者大會上公布的信息,作為鴻蒙OS的重要工具,方舟編譯器從2019年8月開始,將分步驟持續(xù)進(jìn)行開源。
具體的開源計劃如下: 2020年:開始對Java編譯器工具鏈開源,支持Java程序編譯。 2021年:開始對JavaScript編譯器工具鏈開源,可用于JS程序的編譯。
方舟編譯器開源路標(biāo)(綠色部分是本期開源內(nèi)容,藍(lán)色部分待開源)
演示樣例
華為提供了HelloWorld、Exception 異常處理、RC 引用計數(shù)、Tread多線程等多個演示樣例:
樣例:HelloWorld 方舟編譯器的4大優(yōu)勢:
1、多語言聯(lián)合將同一應(yīng)用中的不同語言代碼聯(lián)合編譯、聯(lián)合優(yōu)化,消除語言間的性能“鴻溝”,降低開發(fā)者的優(yōu)化成本
2、軟硬件協(xié)同編譯器與芯片實(shí)現(xiàn)軟硬件協(xié)同優(yōu)化,充分發(fā)揮硬件能效,應(yīng)用體驗(yàn)更佳
3、輕量運(yùn)行時通過編譯器的語言實(shí)現(xiàn)能力和優(yōu)化能力增強(qiáng),應(yīng)用運(yùn)行時的開銷更小
4、多平臺支持支持面向多樣化的終端設(shè)備平臺進(jìn)行編譯和運(yùn)行,根據(jù)設(shè)備特征提供便捷的開發(fā)與部署策略,提高開發(fā)效率 方舟編譯開源面向全球開發(fā)者
方舟編譯器面向全球開發(fā)者進(jìn)行開源,因此,官方網(wǎng)站和代碼托管平臺均面向全球開發(fā)者開放。目前英文版網(wǎng)站正在開發(fā)及內(nèi)測,計劃將于 2019 年 Q4 上線。
45 家合作伙伴 此外,從官網(wǎng)給出的介紹看,目前已有至少45款第三方應(yīng)用支持華為方舟編譯器,都是大家耳熟能詳?shù)某笥脩袅緼PP。
如何評價方舟編譯器?不如去讀代碼
既然華為已經(jīng)Show you the code,代碼是檢驗(yàn)成色的唯一標(biāo)準(zhǔn),開發(fā)者也可以通過代碼托管平臺參與社區(qū)貢獻(xiàn)。 開發(fā)者可基于開源代碼+二進(jìn)制,編譯構(gòu)建出編譯器工具鏈,嘗試對Java程序進(jìn)行編譯。社區(qū)參與者可以通過框架源碼學(xué)習(xí)方舟編譯器的編譯器中間表達(dá)(IR)及基本的中端編譯框架,熟悉方舟編譯器的架構(gòu)思想,并參與諸如對編譯器中端優(yōu)化的貢獻(xiàn)。 根據(jù)說明,目前方舟編譯器的代碼托管在華為云,在未來走向開放治理以后,將按照所掛靠機(jī)構(gòu)的模式來托管。開發(fā)者可通過代碼托管平臺參與社區(qū)貢獻(xiàn),包括文檔貢獻(xiàn)和代碼貢獻(xiàn),同時也可在此平臺上反饋相關(guān)問題和需求。 下面是知乎用戶周剛的評論,新智元經(jīng)授權(quán)轉(zhuǎn)載:
的確是通過中間語言 (IR) 來實(shí)現(xiàn)的,被 IR 接管的部分不管是不是靜態(tài)語言,都變成了一種前端描述語言;因?yàn)槭遣糠謱?shí)現(xiàn) (只可能做到部分),那其他語言的 runtime 必須得保留,從邏輯上講在 Android 上 JVM 還得繼續(xù)存在,好像和之前華為開發(fā)者大會說的完全靜態(tài)化不太一樣;語言層面的靜態(tài)化并不是一個新鮮概念,但基本上都是針對單一語言而言,多語言的靜態(tài)化對我來說的確是第一次看到 (想了下這種做法其實(shí)是華為目前最好的選擇了),考慮到語言的衍生面,這種做法從工作量來講的確非常非常硬核,并且這種硬核更多的應(yīng)該還是 runtime 部分的工作量:相當(dāng)于做了一個 runtime 中間層來負(fù)責(zé) API 轉(zhuǎn)發(fā) (這部分不開源);
開發(fā)者大會被吹上天際的 GC 機(jī)制的確是我當(dāng)時預(yù)測的 Reference Counting 機(jī)制;
vTable 的實(shí)現(xiàn)有點(diǎn)意思,我一直挺喜歡 js 的原型鏈設(shè)計,方舟的實(shí)現(xiàn)相當(dāng)于一種固定長度 (24 個) 的原型鏈設(shè)計,這種做法很務(wù)實(shí);
最后吐槽一下:
文檔的排版,用例和組合方式為什么看起來象實(shí)習(xí)生做的;
C/C++ 的編程規(guī)范雖然很務(wù)實(shí),但既然要開源拿出來見人,能不能也好好組織一下前后邏輯;
為什么 3 分鐘開源就由 Public 轉(zhuǎn)成了 Private;
十年方舟,再造安卓
關(guān)于方舟編譯器的前世今生,可以參考新智元之前推薦的“菊廠搞機(jī)”的一篇文章《十年磨一劍!萬字長文剖析華為方舟編譯器的前世今生》: 可能很多人不知道,華為為方舟編譯器準(zhǔn)備了十年。 2009年,華為啟動5G基礎(chǔ)技術(shù)研究的同時,開始創(chuàng)建編譯組,第一批海內(nèi)外研究人員加入。 2013年,華為推出面向基站領(lǐng)域的自研編譯器HCC,并正式提出編譯器框架構(gòu)想。 2014年,眾多海內(nèi)外專家加入華為,方舟項(xiàng)目正式啟動。 2016年,成立編譯器與編程語言實(shí)驗(yàn)室。 2019年,華為方舟編譯器正式面世!
這十年,每一次攻關(guān)都蘊(yùn)含著華為軟件工程師們的傾力投入,每一個進(jìn)展都值得銘記。 2017年5月,方舟編譯器上第一個Java程序“Hello World”跑通。 2017年8月的一個凌晨,在華為的一個實(shí)驗(yàn)室里,項(xiàng)目組已經(jīng)連續(xù)數(shù)日24小時不間斷攻關(guān),卻始終看不到success的返回信息。絕望之下,工程師把所有通信數(shù)據(jù)打印出來,逐個字節(jié)排查,最終發(fā)現(xiàn)有一處字節(jié)的順序不一致。糾正后,華為方舟跑通了第一個安卓后臺服務(wù)DiskStatus,這標(biāo)志著對安卓的換心手術(shù)進(jìn)入了實(shí)操階段。 2018年春節(jié)前一周,方舟編譯器跑通安卓系統(tǒng)所有后臺服務(wù),并成功移植到手機(jī)。當(dāng)晚,所有人聚集在實(shí)驗(yàn)室的機(jī)房中,等待首個開機(jī)畫面加載成功的神圣時刻。秒針滴答,如同過了一個世紀(jì)那么久,屏幕終于點(diǎn)亮。 歡呼,擁抱,一蹦三尺高,項(xiàng)目組成員們到底沒忍住,留下了激動的淚水。 接下來,項(xiàng)目組在除夕前夜啟動了方舟編譯手機(jī)的Beta測試。大年初一清晨,總架構(gòu)師發(fā)來了第一條經(jīng)編譯器編譯的運(yùn)行程序發(fā)出來的拜年消息:
春節(jié)快樂,方舟大吉!
當(dāng)P30發(fā)布會上“方舟”甫一出現(xiàn),就在中國軟件行業(yè)“炸”了鍋。無數(shù)軟件從業(yè)者從一開始的質(zhì)疑,到弄清方舟真相后的驚嘆……這些都是對華為軟件工程師們十年如一日、一點(diǎn)一滴“啃硬骨頭”的致敬! 實(shí)際上,方舟已經(jīng)不是傳統(tǒng)意義上從高級語言到機(jī)器碼的“萬能翻譯”,更是一個編譯運(yùn)行系統(tǒng)。一方面,方舟編譯器首次在Java領(lǐng)域?qū)⑻摂M機(jī)干掉了,也是軟件史上首次將Java/C/C++等混合代碼一次編譯成機(jī)器碼直接在手機(jī)上運(yùn)行,徹底告別Java的JNI額外開銷,也徹底告別了虛擬機(jī)GC內(nèi)存回收帶來的應(yīng)用進(jìn)程掉線,使操作流暢度大幅提升。如果說目前最新的安卓系統(tǒng)是和諧號動車,那么經(jīng)方舟編譯的安卓系統(tǒng)便是高鐵,是“復(fù)興號”。 華為手機(jī)直接通過方舟編譯器替換了Android system-server的所有后臺服務(wù),這一項(xiàng)就已經(jīng)足夠讓華為EMUI比其他安卓系統(tǒng)更快一步。根據(jù)華為官方測試,方舟編譯器提升手機(jī)系統(tǒng)操作流暢度高達(dá)24%,系統(tǒng)響應(yīng)性能提升44%。入手P30系列的用戶,應(yīng)該已經(jīng)體驗(yàn)到了。
另一方面,方舟編譯器用空間換性能,直接將編譯器的代碼優(yōu)化搬到了開發(fā)者環(huán)境,不再被手機(jī)端的硬件資源所限制,為代碼優(yōu)化提供了無限可能。 此外,經(jīng)測試,新浪微博極速版APP經(jīng)方舟編譯后,操作流暢度提升高達(dá)60%。 解決安卓的四大命門,出于安卓,勝于安卓,超越iOS,并且全面兼容安卓,這就是華為方舟編譯器的使命!安卓卡頓再見!方舟的一個使命,就是解決安卓虛擬機(jī)GC內(nèi)存回收帶來的“Stop World”。 目前安卓手機(jī)內(nèi)存資源不夠用的時候,GC直接叫停所有應(yīng)用,所以偶爾會遭遇莫名卡頓。 方舟編譯器采用了引用計數(shù)法(RC,Reference Counting)來進(jìn)行內(nèi)存的實(shí)時回收,并且配合使用了專門的消除環(huán)算法(消除對象互相引用帶來的無法回收問題),來避免GC集中式回收帶來的系統(tǒng)卡頓。相比GC,方舟的內(nèi)存回收是實(shí)時的而非集中式的,且不需要暫停應(yīng)用進(jìn)程,這樣便大大消除了卡頓。
如果把內(nèi)存回收比作成打掃房間,那么GC的策略是專門有一個衛(wèi)生員,看房間里垃圾太多了,就把所有人請出去,打掃完了再讓大家回來。而方舟的RC則是每個人收拾自己的垃圾,用完就清理,保持清潔的同時不影響人的正常活動。 軟件有一個大家很熟悉的死循環(huán),就是電腦被一個無限循環(huán)的運(yùn)行程序把計算機(jī)資源占光。
這種“死循環(huán)”在軟件中叫“環(huán)引用”。為了從機(jī)制避免手機(jī)內(nèi)存被環(huán)引用“吃掉”,方舟編譯器引入annotation的“告警”標(biāo)示,對基礎(chǔ)類的環(huán)進(jìn)行標(biāo)注。當(dāng)然,Java程序員也可以對業(yè)務(wù)代碼中的環(huán)進(jìn)行標(biāo)注。經(jīng)過豐富的實(shí)踐驗(yàn)證,方舟這種機(jī)制可減少大部分程序中環(huán)的出現(xiàn)。 另外一方面,方舟編譯器在運(yùn)行狀態(tài)下引入了高效的環(huán)回收機(jī)制,允許有選擇的智能回收某個APP的內(nèi)存占用,這對傳統(tǒng)的環(huán)回收算法是一個非常棒的改進(jìn)。Stop World,安卓卡頓,再見!
-
華為
+關(guān)注
關(guān)注
216文章
34519瀏覽量
252514 -
編譯器
+關(guān)注
關(guān)注
1文章
1640瀏覽量
49222 -
GitHub
+關(guān)注
關(guān)注
3文章
473瀏覽量
16520 -
方舟編譯器
+關(guān)注
關(guān)注
0文章
60瀏覽量
229
原文標(biāo)題:鴻蒙OS終于現(xiàn)身!華為方舟編譯器開源,代碼沒放GitHub
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論