华为方舟编译器,了解一下

Posted FinTech技术创新

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为方舟编译器,了解一下相关的知识,希望对你有一定的参考价值。




2019年4月P30系列发布会上,华为首次发布了方舟编译器技术,宣称其抛弃了安卓编译器边解释边执行的模式,采用静态编译,可以做到全程执行机器码,进而高效运行程序,大大缩短程序响应时间。华为官方表示方舟编译器能够将系统操作流畅度提升24%、系统响应力提升44%、第三方应用操作流畅度提升60%。

自方舟编译器官方信息发布后,我行移动互联Firefly团队第一时间关注并持续跟踪,现对方舟编译器的信息做如下汇总供大家参考学习。

华为方舟编译器,了解一下

华为方舟编译器,了解一下




1. 方舟编译器的来龙去脉

方舟编译器的发布不是一日之功,发展脉络如下图所示,正所谓“十年磨一剑”。

华为方舟编译器,了解一下

对比华为终端尤其是华为手机发展历程中的两个关键时间点:

• 华为终端于2011年决定放弃运营商路线,转而走小米、三星等自有品牌路线。

• 华为手机真正站稳脚跟是在2014年Mate 7发布之后。

我们可以看出:

• 至少在2014年前,方舟编译器都不是像现在宣传的这样,是专门针对华为手机的某个黑科技,它应该是华为在编译器领域近10年技术和人才积累的结果,值得一提的是,方舟编译器发展历程中有一个重要人物——Fred Chow(周志德,LinkedIn个人信息https://www.linkedin.com/in/fredchow/)。作为编译技术领域的顶级专家,他在SGI公司开发了Pro64编译器,后来演化为著名的Open64编译器。

• 目前看来,方舟编译器将在华为手机上发挥出最直观和有力的价值,方舟编译器不仅仅是一个类似GCC、LLVM这样的通用编译器,它还包含了运行时(运行时就是VM,例如Java虚拟机、JS引擎等)用以支持Java、JS等语言编译后的执行任务。如下图所示,方舟编译器近期运行时实际上对android系统上原来的Java虚拟机ART进行了替换。

华为方舟编译器,了解一下

从华为终端规划看,方舟编译器未来可支持更多语言的编译,如C++、JS、Dart,甚至华为自有的编程语言,将成为华为鸿蒙OS的重要基石。

华为方舟编译器,了解一下



2. 方舟编译器的两大核心技术点

编译器最核心的功能是将源代码翻译成机器码。这也是目前GCC、LLVM等通用编译器的核心功能。一般来说,GCC、LLVM等通用编译器并不能直接用于诸如Java、JS等解释执行语言的JIT或AOT编译。以Java语言为例,其机器码并非通常意义上的machine code,而是managed machine code。"managed"表示这个机器码和具体虚拟机实现息息相关,受具体虚拟机实现的管控,或者说managed机器码在执行过程中会调用JVM提供的某些功能。例如,Java new指令分配内存时,必须进入JVM并由JVM里的对应功能模块来完成真正的内存分配,而非直接调用OS的malloc。此类功能并非是由Java语言规范、JVM规范来定义,而是由不同JVM的实现机制来处理。

基于上述认识,当方舟编译器被引入华为手机系统后,对比GCC、LLVM等通用编译器,我们认为它包含更具优势的两个核心技术点:

第一个核心技术点是归属编译器技术领域里的中间表达式 Intermediate Representation简写为IR 。华为自创了MAPLE (Multiple Architecture Programing Language & Environment)  IR,其愿景是构建多语言、跨平台、高效的编程环境。基于MAPLE IR的方舟编译器采用了主流的编译器架构设计,即前端源码到中间表达式,再到后端机器码的三段式设计思路。MAPLE IR的指导思想来自Fred Chow在2013年ACM Queue上发的一篇文章《The Challenge of Cross-language Interoperability》 (https://queue.acm.org/detail.cfm?id=2544374) 。这篇文章并未提及具体技术,更多是对编译器设计领域中IR的回顾和展望。其中提出的“Standardizing IRs”的几条原则被当做MAPLE IR的理论基石。

华为方舟编译器,了解一下

第二个核心技术点是它包含一个运行时。这个技术点往往被大家忽略。运行时,也叫Runtime。在Android系统中,JVM的名称叫ART(Android Runtime)。运行时的目的是为了实现诸如Java这种解释执行语言相关的特性,例如GC、反射、线程模型,调试等。但在公开宣传中,华为有意或无意忽略了运行时的存在,仅以“干掉JVM”或“轻量级运行时”的说法替代。但技术上,我们认为目前的编译技术还无法“干掉运行时”。当然,华为对方舟编译器运行时也做很多优化,例如额外使用了引用计数作为一种GC的手段。而Android JVM中,GC并未使用引用计数,原因是会增加JVM的开发难度。

终端厂商、CPU芯片厂商等一直在尝试对Android JVM进行各种各样的优化。对华为来讲,其面临终端设备厂商巨大竞争压力,需要对其自家终端不断进行优化,得益于早期基站领域编译技术的积累,方舟编译器的推出顺理成章。方舟编译器已不单纯定位为通用编译器结合方舟的运行时,将来可以很方便得支持JS、Dart、甚至华为自己的编程语言,这是一种更为有希望的发展模式。


3. 方舟编译器的发展规划

方舟编译器发展规划的一个重要目标就是支持更多语言的编译,包括C++、JS等。这里仍然需要再次强调,Java、JS、Dart这些可解释执行的语言必须依赖运行时。因此,判断方舟编译器里的运行时将是一个重要性和难度都超越MAPLE IR的部分。

华为方舟编译器,了解一下

方舟编译器另外一个目标是构建生态,包括吸引各高校、大学,战略合作伙伴等一起参与方舟编译器及周边功能的开发。我们认为这个生态不仅仅局限在方舟编译器,更多是为后续鸿蒙OS、华为自有开发语言的推出而做的铺垫。


4. 方舟编译器对我行移动应用的影响

方舟编译器目前已适配了51个APP。通过和适配了方舟编译器的APP开发者以及华为内部人士的沟通后,我们得出如下结论:

□ 现阶段由于保密原因,APP适配方舟编译器是一个黑盒过程:APP开发者将APP发给华为,然后华为返回适配好的应用,了解具体适配过程和技术的开发者几乎没有,适配后的APP如果出现任何问题,需要开发者根据华为的建议进行修改(比如放弃使用热修复、插件化等技术)。

□ 针对以H5为主要展示方式的移动类应用(银行类应用为典型代表),方舟编译器无法充分发挥优势,因此现阶段方舟编译器的重心不在此类移动应用上。

□ 使用了安全加固的APP,方舟编译器目前支持不够完善,未来可以通过与安全厂商合作来改进该问题。

□ 方舟编译器对热修复等特性支持还不完善,需进一步开发。

总体来看,对我行移动应用尤其是手机银行来说,方舟编译器还不够成熟,包括:

□ 开源过于仓促:虽然8月31号开源网站正式上线,但真正开开放内容较少,示例代码无法编译通过。其内部人士也坦承“开发时并未以开源方式来做规划。现在突然要开源,很多内容来不及调整和修改(包括代码质量,使用第三方开源库的问题)”。过分的营销宣传导致外界期望过大,这会对方舟试图构建的生态造成负面影响。

□ 技术上并无明显优势:编译器已发展几十年,出现重大变革性创新的可能性不大。国内缺乏IT基础技术领域的研究环境,相关人才更是紧缺。对标谷歌,微软等IT巨头,方舟编译器目前没有明显技术优势。

□ 理想远大,但路程艰险:方舟编译器未来计划支持C++,js,dart。但js和dart在语言特性等方面差异巨大,需要额外开发对应的运行时,工作量巨大。且这几门语言还在不断发展,未来需要投入大量的人力物力。

但未来态的“方舟编译器的运行时”对我行移动应用发展的参考价值巨大,运行时就是VM,例如Java虚拟机、JS引擎等。在这一领域,我们可以参与方舟开源社区,通过与华为合作积累相关技术,这将有利于我们深入优化Java程序、JS应用,尤其是民生小程序等。

另外,在国产化的大趋势下,未来鸿蒙OS有很大机会可以发展起来,我行若能把握先机,可以提出和建立符合国产化趋势的技术标准和规范,因此,总体看来,方舟编译器,值得关注!


Thanks!



作者简介:
邓凡平,《深入理解Android Java虚拟机ART》一书的作者 ,现在科技部移动互联Firefly团队效力。

以上是关于华为方舟编译器,了解一下的主要内容,如果未能解决你的问题,请参考以下文章

安卓用户的福音——华为方舟编译器分析!

华为:方舟编译器8月正式开源

余承东没吹牛,华为方舟编译器首款优化应用上架

华为方舟编译器横空出世,这次彻底了解下底层是如何打败安卓

万众瞩目:华为方舟编译器开源官网正式上线,框架代码公布

华为方舟编译器深度解读 颠覆安卓体验就靠它