微信扫一扫
分享到朋友圈

华为王成录:解密方舟编译器和EMUI未来四大演进方向!

作者:智东西 来源:智东西 公众号
分享到:

04-26

看点:今年8月,方舟编译框架代码将开源,11月完整方舟编译器代码开源。

智东西4月25日报道,两周前华为年度第一款旗舰机P30,同时宣布将操作系统升级为EMUI9.1。在发布会上,华为推出了方舟编译器和超级文件系统EROFS两大创新亮点。由于发布会时间限制,当时华为仅仅用两页PPT粗略地介绍了这两项技术作用。据华为方面表示,自发布会后,华为软件OpenLab团队的电话几乎要被打爆了,很多开发者都想要了解方舟编译器更多的信息。

▲华为CBG软件部总裁 王成录

今天,智东西与少数媒体参与了华为EMUI软件沟通会,会上华为CBG软件部总裁王成录详细介绍了方舟编译器和超级文件系统EROFS两项技术的原理以及研发背后的细节,以及EMUI未来的主攻方向。

什么是方舟编译器?

分享会一开始,王成录博士先介绍了EMUI演进过程以及近几年来,华为在系统软件上针对用户使用中的痛点问题进行的有针对性的优化。比如EMUI5.0主要解决安卓系统卡顿问题,EMUI8.2上线了GPU Turbo主攻游戏性能受限问题,EMUI9.0上线了Link Turbo主攻网络覆盖不均问题,EMUI9.1则上线了方舟编译器和超级文件系统EROFS,针对安卓流畅度不足问题。

当前安卓平台的绝大多数应用是使用Java写的,但在底层,最终真正能让计算机“听懂”并执行的其实是机器语言,也就是由0和1组成的二进制代码。所以,这中间必须存在着由高级语言到机器语言的转化。

一般来说有两种办法:

(1)引入一个中间层,其工作的方式是,理解一句Java语句就将其翻译为机器码,让硬件执行一下,称之为解释执行。这种方式对代码不加筛选,执行效率非常低。

(2)直接把高级语言翻译成机器语言。这又有两种方式:一是在程序运行之前,把高级语言编译为机器语言,称之为 AOT(Ahead of time)编译;二是,在程序运行后,实时地把高级语言编译为机器语言并执行,称之为 JIT(Just in time) 编译。

在安卓5.0之前,安卓采用的是解释执行 + JIT 的方式执行高级语言代码,属于边解释边执行模式,但效率非常低。随后安卓版本不断迭代,在安卓6.0 阶段推出了虚拟机 ART。

目前安卓采用的就是解释执行 +  JIT + AOT 的综合模式。

那么,编译器又是什么呢?编译器就是将计算机高级编程语言转化为机器可执行的机器语言的工具,也就是直接转化为二进制代码。可以说是一步到位的编译。

用方舟编译器做出来的APK,下载到手机上直接就是机器语言,也就是二进制代码,机器直接就可以运行,不需要再做编译了,这是方舟编译器最本质的技术突破。

编译器的研发难不难?编译器开发是需要长期大量研发积累,王成录博士也坦言需要“板凳要坐十年冷”。同时,开发编译器需要研发人员既精通高级语言,对各种框架等非常熟悉,又要对机器语言了如指掌,对研究人员要求非常高。谷歌生态建立了这么久,其规模非常庞大,其上的框架和、应用等非常多,想要重新做一个适配谷歌生态的编译器,工作量可想而知,是非常巨大的。

华为是如何作出方舟编译器呢?据王博士介绍,华为在编译器研发上的积累,可以追溯到2009年,华为海思研发起步时,当时吸引了第一批海内外研究人员加入,创建了编译组。2013年,华为自研并推出了用于基站的编译器HCC,这也是华为编译器框架构想的正式提出,也是方舟编译器的前身。

2014年,Fred Chow( 周志德)加入华为并担任华为编译器技术首席科学家,建立了方舟编译器的主架构。2015年华为推出自研编程语言CM,2016年成立编译器与编程语言实验室,2019年华为正式推出方舟编译器。前前后后共计十年时间,经过了几百位研究人员的努力,投入的资金也有几亿美元了。

王成录博士表示,有了方舟编译器优化的安卓系统在DNA上与苹果iOS系统接近了。华为下一步要做的工作就是推动生态建立,不断将系统进行优化,让用户用上更纯净的安卓软件。

方舟编译器的四大技术亮点:

1、是一种多语言联合优化编译器,消除了跨语言调用的开销

据王成录博士介绍,当前Top级的应用95%以上都采用混合语言模式,涉及多种开发语言。具体来说是程序的逻辑部分采用Java语言编写,但为了增强安全性、可靠性、兼容性等能力,应用开发者可能会用C语言写库,供Java调用。Java和C语言之间调用,是一定要通过接口去使用,这就会形成额外的性能开销,而且相比于不需要调用的情况开销很大。

而方舟编译器则可以让不同语言代码在程序开发环境中环境中编译成一套语言统一的可执行文件,在硬件的运行环境高效执行。也就是说,方舟编译器中吸纳了现在安卓生态中的各种主流框架和库,对不同语言做了统一的程序优化,直接编译成机器指令。

2、程序运行时无需依赖虚拟机,减少资源占用,并且建立了高效的内存回收机制

Java语言有非常多的优势,包括跨平台、分布式,安全性高等。Java语言在设计之初,有一个Java语言开发包,其中有一个非常重要的东西,就是虚拟机。虚拟机的作用是,无论使用什么样的硬件,都可以将其抽象