超级重磅!
8 月 31 日,华为开源了方舟编译器的源代码,与此同时方舟编译器的开源官网也正式上线。作为鸿蒙OS的重要组成部分,“方舟”的开源,也意味着鸿蒙OS的开源不远矣!
此次公布方舟编译器框架源码后,华为预计将于2020年及以后实现方舟编译器工具链完整开源。
图片来源:华为官方发布(下同)
今年 4 月,华为在发布 P30 系列手机时推出了「方舟编译器」,它随着 EMUI 9.1 一同放出。华为表示它能够改善安卓应用编译效率,让 APP 从原先的边解释边执行转变为全程机器码高效运行程序。
官方网站:https://www.openarkcompiler.cn
代码托管网站:
https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler
根据官网信息,方舟编译器是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包含编译器、工具链、运行时等关键部件。方舟编译器还在持续演进中,陆续将上述能力实现和开源。
华为开源文档表示,当前方舟编译器支持 Java/Kotlin 程序字节码的前端输入,其它编程语言的支持(如 C/C /JS 等)还在规划中。
方舟编译器的中间表示(IR)转换器将前端输入转换成方舟 IR,并输送给后端的优化器,最终生成二进制文件,二进制文件与编译器运行时库文件链接生成可执行文件,在方舟的运行环境中就可执行该文件。
目前方舟编译器的源代码已经都放出来了,但并没有在 GitHub 开源。如下所示为开源代码的界面,里面包含了众多代码和文档等文件。
但是世界上没有免费的午餐,这些语言要求工程师编程能力要强一点和繁琐一点,从而去规避他们的缺陷如手动或半自动释放资源。
安卓用的是有名的资源浪费的编程语言Java,但是要求编程能力不高达到快速开发。
2015年,谷歌在安卓上决定上Java已经很多年通用的预编译技术(AOT),但是我们发现安卓的实现没有以前SUN在SPARC芯片上做的好,原因之一是谷歌不做手机芯片,没法和芯片结合设计。
再说,也许浪费硬件资源,可以给芯片厂商带来产业的不断升级和收入,如CPU频率增大/核数增多,闪存/内存的增多。
但是对手机厂商就不是一件好事,因为同一的用户体验,要更加高价的硬件成本来达到。
再说但是随着半导体生产工艺的瓶颈摩尔定律失效,软件和硬件联同设计就避不开成了竞争力的保证。
那么?方舟编译器的本质和目的是什么呢?
如上所述,为了对标苹果,当初的目的是为了省内存和闪存,从而有相应性能提高,而首先尝试改变安卓上的采用编程技术,再来实现软件和硬件联同设计,如CPU的流水线和特有指令等。
从方舟编译器的开源,就可以很清晰的看到,当初决定的技术方向,就是把动态语言特性静态化在运行前预处理,这还是属于AOT范围,但是比SUN当时在Java上做的AOT激进:
把Java的字节码预编译成机器码,当然有华为自己的IR为编译转换和优化所用;
把Java的内存垃圾管理GC改成和苹果自动引用计数ARC一样。
这是不包含传统编译器:
Java编程语言解析器,负责把Java程序源代码转换成Java的字节码;
生成的机器码还是ARM 标准的指令集,没有华为芯片特定的指令;
没有自己链接器,所以没有对应的优化。
(注:具体技术细节和实现请研究方舟编译器开源网站)
可以这样理解:目前,方舟编译器已经是中国第一个能把部分核心技术自研出来并大规模商用的尝试,有着深远的意义。
作者:你发姐
编辑:杨燊
监制:王俊稷
来源:华为官网、机器学习研究会订阅号、 CSDN、36Kr
“第一财经广播”
花粉社群VIP加油站
猜你喜欢