八月份,方舟編譯器開源官網已經上線,同時框架代碼同步對外公布。這次方舟編譯器開源的是編譯器框架部分源碼,包括編譯器中間表示(IR)和語言編譯實現,同時搭配編譯器其他二進制組件,實現Java程序到aarch64匯編指令的編譯過程。
方舟編譯器的開源雖然已經過去近一個月時間,各大論壇以及行業(yè)內的討論仍在持續(xù)。北京理工大學計算學院計衛(wèi)星副教授認為,華為方舟編譯器基于新的中間語言,實現了從Java程序(中間代碼)到機器代碼的翻譯。這其中最主要的、最引人注目的亮點是能夠離線將現有的移動應用翻譯為機器代碼執(zhí)行,并且在這個過程中加入了大量的代碼優(yōu)化工作。
同時,計衛(wèi)星副教授還給予方舟編譯器一些期許,表示華為方舟編譯器就如同一個新生的嬰兒,為大家?guī)砹诵碌南M侨匀挥泻艽蟮某砷L空間,需要不斷的發(fā)展和壯大,但是這都有賴于整個業(yè)界的精心照看和呵護,有賴于大家給與足夠的耐心和信心。
以下為計衛(wèi)星副教授《從方舟編譯器看華為終端軟件生態(tài)的構建之路》全文:
經過不斷的醞釀和催生,華為方舟編譯器在八月的最后一天開源,向公眾揭開了神秘面紗的一角。在這之前,大小媒體對方舟編譯器進行了大量報道,大家對這款編譯器的期望值也不斷被抬高。
從此前公開的資料和目前公開的部分源碼來看,華為方舟編譯器基于新的中間語言,實現了從Java程序(中間代碼)到機器代碼的翻譯。這其中最主要的、最引人注目的亮點是能夠離線將現有的移動應用翻譯為機器代碼執(zhí)行,并且在這個過程中加入了大量的代碼優(yōu)化工作。但是此次開源的部分并沒有包括運行時系統,以及編譯器中的很多優(yōu)化模塊,所以仍然會讓大家保持一定的好奇心,Java語言特性相關的部分在運行時是如何支持的,例如垃圾收集和異常處理。特別是垃圾收集算法,大家已經研究了很多年,出現了很多種不同的算法,但是華為這次采用不同尋常的技術路線,也引起了廣泛的討論,實際效果有待于進一步實踐檢驗。
從代碼規(guī)模的角度來看,此次開源的代碼規(guī)模并不是很大,但是要進一步了解其內部的實現細節(jié),則需要更多的時間。當下為什么除了處理器和操作系統,編譯器會被推到前臺成為輿論討論的熱點之一?我想這也是不得已而為之,在華為被打壓的關鍵時刻,推出方舟編譯器的戰(zhàn)略意義可能要更為重要一些。沒有軟件的計算機系統,就如同剝離了血肉的人體,只剩下堅硬的骨骼,沒有生命的氣息。計算機系統也是有生命的,軟件如同血肉和神經,賦予了計算機不同的能力和空間。即使華為有了自己的芯片和操作系統,沒有繁榮的應用軟件生態(tài)做支撐,這些芯片和系統軟件也只會被束之高閣。從過去到現在,已有的國產自主系統都是在這一困境中不斷掙扎,目前也只是在特定的領域取得了不錯的進展。因此,如何能讓已有的智能終端軟件,特別是手機上的應用在華為的手機上順暢的運行起來,就成為這些核心芯片和系統從后臺走向前臺必須要解決的問題。直接翻譯機器代碼雖然能夠極大提高程序的運行效率,但是同時也會使得原本只用Java編寫的應用失去了跨平臺運行的能力,不過對于手機類APP,這個倒不是太大問題。
此外,單純靠離線翻譯并不能將所有的應用順利的翻譯到華為的平臺上運行,這主要是因為:一方面,部分應用在發(fā)布之前進行了加固處理,只有在運行時部分代碼才會被解碼并執(zhí)行,因此完全靠靜態(tài)分析并不能解決所有的問題;另一方面,部分應用為了躲避分析,在運行時通過網絡動態(tài)加載部分代碼執(zhí)行,這一部分代碼在運行之前對編譯器來說完全是黑洞,并且各個不同的應用處理方式也各不相同。要完整支持所有應用的平滑翻譯和順利運行,必然會導致一個復雜的解決方案,而這一復雜的方案是否會引起可靠和安全相關的問題則不得而知。從相關報道來看,并沒有說明現有應用會100%支持和成功運行。
反過來看,健壯的軟件并不是一天長成的,肯定是經過時間的打磨和錘煉的。華為方舟編譯器就如同一個新生的嬰兒,為大家?guī)砹诵碌南M?,但是仍然有很大的成長空間,需要不斷的發(fā)展和壯大,但是這都有賴于整個業(yè)界的精心照看和呵護,有賴于大家給與足夠的耐心和信心。
方舟編譯器未來要走的路還很長。華為應該在開源的基礎之上構建一個開放的生態(tài),讓高校、科研院所、企業(yè)和個人開發(fā)者共同參與、協作貢獻,不斷拓寬方舟的寬度和深度,才能讓方舟承載的更多。
說不定哪天在大家的共同努力下會長出一個新的語言,從此才會剝離的更加徹底和干凈。基于此構建的軟件生態(tài),也才能讓華為的芯片和操作系統成為真正的大殺器。