每日最新頭條.有趣資訊

鴻蒙OS終於現身!華為方舟編譯器開源,代碼沒放GitHub

新智元報導

編輯:張佳、小芹

【新智元導讀】昨日,華為方舟編譯器開源官網正式上線,代碼沒有放在GitHub,而是放到了開源中國的碼雲上。此次方舟編譯器的開源打響了鴻蒙OS開源的第一槍,未來將有更多開源陸續放出。

Show you the code!

8月31日,華為方舟編譯器開源官網正式上線,余承東也在微博上公布了相關消息。

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

方舟編譯器整體框架

值得關注的是,此次方舟代碼沒有放在GitHub,而是放到華為自建的開源平台,以及開源中國的碼雲上,目前已收獲876顆星。

官方網站:

https://www.openarkcompiler.cn

代碼託管網站:

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

碼雲鏡像倉庫地址:

https://gitee.com/harmonyos/OpenArkCompiler

鴻蒙OS開源第一槍,更多開源陸續放出

此次方舟編譯器的開源打響了鴻蒙OS開源的第一槍,首次開源範圍是編譯器 IR( Intermediate Representation)、RC(Reference Counting)和多語言設計思想等,用於與業界、學術界溝通交流。

後續將陸續開源編譯器前端、後端,支持其它語言(如 JavaScript)的編譯等,當前部分Java語言特性和JVM虛擬機特性的支持未包括在本次開源代碼中,包括:annotation、lambda表達式、泛型等。

華為消費者 BG 軟體部總裁王成錄表示方舟編譯器代碼會陸續開源

根據之前華為在開發者大會上公布的信息,作為鴻蒙OS的重要工具,方舟編譯器從2019年8月開始,將分步驟持續進行開源。

具體的開源計劃如下:

2020年:開始對Java編譯器工具鏈開源,支持Java程序編譯。

2021年:開始對JavaScript編譯器工具鏈開源,可用於JS程序的編譯。

方舟編譯器開源路標(綠色部分是本期開源內容,藍色部分待開源)

演示樣例

華為提供了HelloWorld、Exception 異常處理、RC 引用計數、Tread多線程等多個演示樣例:

樣例:HelloWorld

方舟編譯器的4大優勢:

1、多語言聯合

將同一應用中的不同語言代碼聯合編譯、聯合優化,消除語言間的性能“鴻溝”,降低開發者的優化成本

2、軟硬體協同

編譯器與芯片實現軟硬體協同優化,充分發揮硬體能效,應用體驗更佳

3、輕量運行時

通過編譯器的語言實現能力和優化能力增強,應用運行時的開銷更小

4、多平台支持

支持面向多樣化的終端設備平台進行編譯和運行,根據設備特徵提供便捷的開發與部署策略,提高開發效率

方舟編譯開源面向全球開發者

方舟編譯器面向全球開發者進行開源,因此,官方網站和代碼託管平台均面向全球開發者開放。目前英文版網站正在開發及內測,計劃將於 2019 年 Q4 上線。

45 家合作夥伴

此外,從官網給出的介紹看,目前已有至少45款第三方應用支持華為方舟編譯器,都是大家耳熟能詳的超大用戶量APP。

如何評價方舟編譯器?不如去讀代碼

既然華為已經Show you the code,代碼是檢驗成色的唯一標準,開發者也可以通過代碼託管平台參與社區貢獻。

開發者可基於開源代碼+二進製,編譯構建出編譯器工具鏈,嘗試對Java程序進行編譯。社區參與者可以通過框架源碼學習方舟編譯器的編譯器中間表達(IR)及基本的中端編譯框架,熟悉方舟編譯器的架構思想,並參與諸如對編譯器中端優化的貢獻。

根據說明,目前方舟編譯器的代碼託管在華為雲,在未來走向開放治理以後,將按照所掛靠機構的模式來託管。開發者可通過代碼託管平台參與社區貢獻,包括文檔貢獻和代碼貢獻,同時也可在此平台上反饋相關問題和需求。

下面是知乎用戶周剛的評論,新智元經授權轉載:

的確是通過中間語言 (IR) 來實現的,被 IR 接管的部分不管是不是靜態語言,都變成了一種前端描述語言;因為是部分實現 (只可能做到部分),那其他語言的 runtime 必須得保留,從邏輯上講在 Android 上 JVM 還得繼續存在,好像和之前華為開發者大會說的完全靜態化不太一樣;語言層面的靜態化並不是一個新鮮概念,但基本上都是針對單一語言而言,多語言的靜態化對我來說的確是第一次看到 (想了下這種做法其實是華為目前最好的選擇了),考慮到語言的衍生面,這種做法從工作量來講的確非常非常硬核,並且這種硬核更多的應該還是 runtime 部分的工作量:相當於做了一個 runtime 中間層來負責 API 轉發 (這部分不開源);

開發者大會被吹上天際的 GC 機制的確是我當時預測的 Reference Counting 機制;

vTable 的實現有點意思,我一直挺喜歡 js 的原型鏈設計,方舟的實現相當於一種固定長度 (24 個) 的原型鏈設計,這種做法很務實;

最後吐槽一下:

文檔的排版,用例和組合方式為什麽看起來象實習生做的;

C/C++ 的編程規範雖然很務實,但既然要開源拿出來見人,能不能也好好組織一下前後邏輯;

為什麽 3 分鐘開源就由 Public 轉成了 Private;

十年方舟,再造安卓

關於方舟編譯器的前世今生,可以參考新智元之前推薦的“菊廠搞機”的一篇文章《十年磨一劍!萬字長文剖析華為方舟編譯器的前世今生》:

可能很多人不知道,華為為方舟編譯器準備了十年。

2009年,華為啟動5G基礎技術研究的同時,開始創建編譯組,第一批海內外研究人員加入。

2013年,華為推出面向基地台領域的自研編譯器HCC,並正式提出編譯器框架構想。

2014年,眾多海內外專家加入華為,方舟項目正式啟動。

2016年,成立編譯器與編程語言實驗室。

2019年,華為方舟編譯器正式面世!

這十年,每一次突破都蘊含著華為軟體工程師們的傾力投入,每一個進展都值得銘記。

2017年5月,方舟編譯器上第一個Java程序“Hello World”跑通。

2017年8月的一個凌晨,在華為的一個實驗室裡,項目組已經連續數日24小時不間斷突破,卻始終看不到success的返回信息。絕望之下,工程師把所有通信數據列印出來,逐個字節排查,最終發現有一處字節的順序不一致。糾正後,華為方舟跑通了第一個安卓後台服務DiskStatus,這標誌著對安卓的換心手術進入了實操階段。

2018年春節前一周,方舟編譯器跑通安卓系統所有後台服務,並成功移植到手機。當晚,所有人聚集在實驗室的機房中,等待首個開機畫面加載成功的神聖時刻。秒針滴答,如同過了一個世紀那麽久,螢幕終於點亮。

歡呼,擁抱,一蹦三尺高,項目組成員們到底沒忍住,留下了激動的淚水。

接下來,項目組在除夕前夜啟動了方舟編譯手機的Beta測試。大年初一清晨,總架構師發來了第一條經編譯器編譯的運行程序發出來的拜年消息:

春節快樂,方舟大吉!

當P30發布會上“方舟”甫一出現,就在中國軟體行業“炸”了鍋。無數軟體從業者從一開始的質疑,到弄清方舟真相後的驚歎……這些都是對華為軟體工程師們十年如一日、一點一滴“啃硬骨頭”的致敬!

實際上,方舟已經不是傳統意義上從高級語言到機器碼的“萬能翻譯”,更是一個編譯運行系統。

一方面,方舟編譯器首次在Java領域將虛擬機乾掉了,也是軟體史上首次將Java/C/C++等混合代碼一次編譯成機器碼直接在手機上運行,徹底告別Java的JNI額外開銷,也徹底告別了虛擬機GC記憶體回收帶來的應用進程掉線,使操作流暢度大幅提升。如果說目前最新的安卓系統是和諧號動車,那麽經方舟編譯的安卓系統便是高鐵,是“複興號”。

華為手機直接通過方舟編譯器替換了Android system-server的所有後台服務,這一項就已經足夠讓華為EMUI比其他安卓系統更快一步。根據華為官方測試,方舟編譯器提升手機系統操作流暢度高達24%,系統響應性能提升44%。入手P30系列的用戶,應該已經體驗到了。

另一方面,方舟編譯器用空間換性能,直接將編譯器的代碼優化搬到了開發者環境,不再被手機端的硬體資源所限制,為代碼優化提供了無限可能。

此外,經測試,新浪微博極速版APP經方舟編譯後,操作流暢度提升高達60%

解決安卓的四大命門,出於安卓,勝於安卓,超越iOS,並且全面兼容安卓,這就是華為方舟編譯器的使命!

安卓卡頓再見!

方舟的一個使命,就是解決安卓虛擬機GC記憶體回收帶來的“Stop World”。

目前安卓手機記憶體資源不夠用的時候,GC直接叫停所有應用,所以偶爾會遭遇莫名卡頓。

方舟編譯器採用了引用計數法(RC,Reference Counting)來進行記憶體的實時回收,並且配合使用了專門的消除環算法(消除對象互相引用帶來的無法回收問題),來避免GC集中式回收帶來的系統卡頓。相比GC,方舟的記憶體回收是實時的而非集中式的,且不需要暫停應用進程,這樣便大大消除了卡頓。

如果把記憶體回收比作成打掃房間,那麽GC的策略是專門有一個衛生員,看房間裡垃圾太多了,就把所有人請出去,打掃完了再讓大家回來。而方舟的RC則是每個人收拾自己的垃圾,用完就清理,保持清潔的同時不影響人的正常活動。

軟體有一個大家很熟悉的死循環,就是電腦被一個無限循環的運行程序把計算機資源佔光。

這種“死循環”在軟體中叫“環引用”。為了從機制避免手機記憶體被環引用“吃掉”,方舟編譯器引入annotation的“告警”標示,對基礎類的環進行標注。當然,Java程序員也可以對業務代碼中的環進行標注。經過豐富的實踐驗證,方舟這種機制可減少大部分程序中環的出現。

另外一方面,方舟編譯器在運行狀態下引入了高效的環回收機制,允許有選擇的智能回收某個APP的記憶體佔用,這對傳統的環回收算法是一個非常棒的改進。

Stop World,安卓卡頓,再見!

獲得更多的PTT最新消息
按讚加入粉絲團