昨日,華為方舟編譯器開源官網正式上線,代碼沒有放在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,安卓卡頓,再見!
-
華為
+關注
關注
216文章
34411瀏覽量
251506 -
編譯器
+關注
關注
1文章
1623瀏覽量
49108 -
GitHub
+關注
關注
3文章
469瀏覽量
16428 -
方舟編譯器
+關注
關注
0文章
60瀏覽量
198
原文標題:鴻蒙OS終于現身!華為方舟編譯器開源,代碼沒放GitHub
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論