一文看懂华为方舟编译器

Posted 圣杰之星

tags:

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

   2019年8月31日, 华为在一片“show me the code ”的追讨声和美国的强势围堵拦截下,上线开源了方舟编译器。看得出来,华为还是略带几分无奈。毕竟作为一家掌握核心技术的公司,早些年,相比其他大型公司,华为在开源领域的贡献,就如同它的掌门人任总一样的低调。开源虽然不挣钱,甚至倒贴钱,但是它对整个生态的构建极其重要。这次把核心的组件方舟编译器开放源代码(部分),看来开发者们确实可以兴奋一阵了。

     本文带大家解疑这次方舟编译器发布的重要信息。

1. 方舟编译器是什么?

请看下图:

        这是方舟编译器的主体框架图,浅蓝色部分为编译器的核心组件。简单的说,其主要实现 Java 程序(源平台程序)到 aarch64 (目标平汇编指令的编译过程。那有人就要问了, aarch64是什么? 为什么要实现Java到aarch64汇编指令的转换?请看下文。

2. 目标平台aarch64是什么?

        aarch64 是armv8处理器64位的一种硬件平台,这里代表移动设备平台,其他的平台还有高通骁龙系列,Imagination公司的PowerVR系列,英特尔x86系列,还有华为的麒麟系列等。

       学过嵌入式开发课程的同学都知道,在我们自己PC上编译好的可执行程序, 是不能简单拷贝到开发板(学习板)上运行的。因为PC机和开发板是两种不同的硬件架构,其可执行程序的指令集都不相同。这里的开发板可以代替移动设备。 华为要想推自主全新的手机平台(鸿蒙+麒麟),新的平台就必须要能够把运行现有的绝大多数应用软件。所以必须要有转换器,编译器来实现这个功能,方舟编译器就来了。

       有了多平台,那就有跨平台的问题,上软件工程课的时候,跟大家提到一个词叫“跨平台。当时我们重点对比了JAVA的跨平台和Qt(C++)的跨平台的异同点。今天在这里,我们就可以看到方舟编译器里面有这两种典型的跨平台技术的影子。

3. 方舟编译器用来干什么?

        官方解释: 方舟编译器是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包含编译器、工具链、运行时等关键部件。

        我们根据上图的框架图来通俗直白解释就是:把用java/Kotin写的Andriod程序编译成可以在将来的鸿蒙操作系统+麒麟处理器上运行的可执行文件。这样一说,大家肯定明白了为什么鸿蒙系统一直不出,而是先出编译器了吧?

       如果方舟编译不能很好的将现有的android程序编译成鸿蒙系统可流畅运行的程序,那么,即使鸿蒙系统发布,估计也没人会用。因为,这影响了开发者的利益,开发者首先会不买账。开发者一不满意,那鸿蒙系统的应用就少,接着,项目很可能就黄了。

4. 方舟编译器的技术原理是怎么的?

       目前, Android 平台的绝大多数应用是使用 Java 语言写的,Android 5.0以上版本采用的是解释执行+JIT(Just in time) +AOT(Ahead of time)综合模式运行Java代码。

  • 所谓解释执行, 就是CPU之上运行一个解释器,运行Java程序的时候,每运行一行,解释器就翻译一行Java代码为机器语言,这种方式极其低效。

  • 所谓AOT,是指程序运行之前直接把 Java 代码编译为机器语言。这种方式有两个缺点,编译慢和占用空间大。

  • 所谓JIT, 是指程序运行起来之后,再实时地把 Java 代码编译成机器语言,再执行。

    不管哪种方式,它的翻译器和编译器都是运行在一个被称为虚拟机(Virtual Machine,简称 VM)的中间层上, 在资源有限的手机上面,转换器和翻译器会来一定的卡顿,另一方面VM 在内存垃圾回收会带来卡顿。这也是为什么Android系统在不管多高硬件配置下长时间运行,仍然会有运行不流畅的一个重要原因。

      华为方舟编译器带来哪些改进?简单的说,它可以将高级语言(Java)直接变成机器代码,无需再通过 Android 操作系统中内置的 VM 编译器去运行程序。

      举个例子,当开发者的一个应用A在应用市场上架之后,用户下载的这个apk软件包就是经过编译之后的, 如果通过方舟编译器的编译,A.apk这个软件包就已经被转换成cpu可以识别的机器代码,所以就可以再手机快速install, start,  run 。而不是像之前一样,这个A.apk里面是一些可以给虚拟机解释和翻译的字节码文件(.class文件或者kotlin_metadata文件)。

     不由得感叹一句,天下大势,分久必合,合久必分。当初引入虚拟机,是为了一次编译,处处可运行。如今为了性能,又丢掉虚拟机。


5. 方舟编译器的亮点在哪儿?


  • 安卓性能革命,大幅提升运行效率。

  • 更高效内存回收机制。

  • 为下一步鸿蒙OS出世扫清障碍。



官方网站

>>https://www.openarkcompiler.cn

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

>>https://gitee.com/harmonyos/OpenArkCompiler



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

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

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

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

华为方舟编译器开源!前华为人重磅解读!

安卓性能革命突破?华为方舟编译器详解

这个改造了Android的华为方舟编译器,厉害不?