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