超重磅!华为“方舟编译器”源代码宣布开源,鸿蒙OS即将迎来开源时代

2019-09-02     第一财经广播

超级重磅!

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 开源。如下所示为开源代码的界面,里面包含了众多代码和文档等文件。

华为CBG软件部总裁王成录介绍:华为2009年就开始为编译器做准备,2013年有了自己的编译器HCC,2014年引入了Fred Chow等技术大牛,来做华为编译器的主架构。此后,2012年实验室成立了编译器与编程语言实验室,今年4月推出了方舟编译器。

编译器是一种语言(通常为高级语言)翻译为另一种语言(通常为低级语言)的程序,可以将源代码翻译成可以被计算机或虚拟机执行的代码。华为方舟编译器可供开发者,在开发环境一次性将高级语言编译为机器码,可以让手机安装的APP运行效率明显提升。

相比于安卓原生系统,方舟编译器可以明显提升系统运行效率。


首先,它是多语言联合优化编译器,消除跨语言调用开销,这是影响Android性能消耗较大的核心原因之一。


其次,把虚拟机去掉了,内存回收机制。虚拟机可以帮助安卓系统适配各种处理器,实现跨平台操作,但也会占用额外的系统资源。

华为宣称,方舟编译器可将安卓应用流畅度最高提升60%。

据华为实验室测试数据,EMUI 9.1在仅仅对系统组件System Server应用了华为方舟编译器后,系统操作流畅度提升24%,系统响应性能提升44%。新浪微博极速版是第一款采用方舟编译器的第三方应用,操作流畅度提升60%。

据36Kr报道,谈及华为之所以要做方舟编译器,王成录解释:

“由于安卓的开放性,对上层应用没有强制规则。比如安卓的第三方应用市场非常多,数量无法统计;安卓的安装方式也非常多,通过邮件都可以安装,由此带来的问题比较多。所以安卓用户要真正能够获得好的体验,手机厂家只把手机(硬件)做好是不够的,(还需要对软件进行提升)。”

值得一提的是,华为在国内EMUI在历代版本的更新当中,除了Linux的安卓内核外,已逐步把安卓系统的很多部分替代了。方舟编译器也是其中关键步骤之一,取代了安卓原生系统虚拟机的位置。

华为此举,可以认为是将安卓系统过渡到自研系统的铺垫。在华为最新发布的EMUI 10当中,已经具备了很多与鸿蒙相似的优点,包括硬件能力互助共享、一次开发多端部署等等。如果未来进一步把Linux内核替代为鸿蒙内核,在国内市场实现平稳迁移并非不可能。

华为发布会资料图

CSDNnews最新刊发,上海鉴释科技创始人、前华为人、原方舟编译器立项负责人之一梁宇宁表示,这两天华为的方舟编译器正式开源引起了国内媒体的很大反响,比在三月份产品发布会时发布还更激烈;而方舟本身亮点也是非常地多!

编程技术和芯片以及操作系统的关

作者 | 梁宇宁

首先来普及一下,编译器,是把各编程语言的程序编译成可以在各个不同芯片运行的指令集机器码。所以编译器是和编程语言有关,又和芯片有关的。

后来,业界慢慢就引入一个术语:编程技术,它是一个技术范围的总述大概包括编程语言,编译器和程序分析/连接/操作等有关技术,目的让程序在芯片跑的更快耗资源最少。

对于芯片来说,操作系统无非就是一堆不停在跑的程序。

如果要一个操作系统高效,他的设计必须和他的芯片或多或少有更密切的关联,而这些关联就是用编译器去达成的,就是负责把程序源代码根据芯片的设计去做最大化优化。

浅而易见,如果只有芯片和操作系统,而没有编程技术是明显不够的。

举个例子,苹果是有自己A系列芯片和微内核Darwin基础上iOS操作系统,和编程技术如SWIFT编程语言,LLVM编译框架基础上的SWIFT语言SWIFTC, 和C/C++/ObjectiveC语言的CLANG编译器等。

同样谷歌/Intel/AMD/NVidia/Microsoft也有这些能力。

因为华为一直是对技术非常有追求的一个公司,也是他的产品在世界上有竞争力的原因,华为手机的技术一直是以苹果手机对标的,自然而然,华为就要构造这些能力从芯片,操作系统到编程技术。

苹果手机的流畅度是公认的,而且如果安卓手机要达到这样的流畅度会需要更多的硬件资源。

这归咎于苹果采用的编程技术和安卓的不一样,如编程语言,SWIFT/C/C++/ObjectiveC静态语言就有硬件资源要求小天生的优点。

但是世界上没有免费的午餐,这些语言要求工程师编程能力要强一点和繁琐一点,从而去规避他们的缺陷如手动或半自动释放资源。

安卓用的是有名的资源浪费的编程语言Java,但是要求编程能力不高达到快速开发。

2015年,谷歌在安卓上决定上Java已经很多年通用的预编译技术(AOT),但是我们发现安卓的实现没有以前SUN在SPARC芯片上做的好,原因之一是谷歌不做手机芯片,没法和芯片结合设计。

再说,也许浪费硬件资源,可以给芯片厂商带来产业的不断升级和收入,如CPU频率增大/核数增多,闪存/内存的增多。

但是对手机厂商就不是一件好事,因为同一的用户体验,要更加高价的硬件成本来达到。

再说但是随着半导体生产工艺的瓶颈摩尔定律失效,软件和硬件联同设计就避不开成了竞争力的保证。

那么?方舟编译器的本质和目的是什么呢?

如上所述,为了对标苹果,当初的目的是为了省内存和闪存,从而有相应性能提高,而首先尝试改变安卓上的采用编程技术,再来实现软件和硬件联同设计,如CPU的流水线和特有指令等。

从方舟编译器的开源,就可以很清晰的看到,当初决定的技术方向,就是把动态语言特性静态化在运行前预处理,这还是属于AOT范围,但是比SUN当时在Java上做的AOT激进:

  • 把Java的字节码预编译成机器码,当然有华为自己的IR为编译转换和优化所用;

  • 把Java的内存垃圾管理GC改成和苹果自动引用计数ARC一样。

这是不包含传统编译器:

  • Java编程语言解析器,负责把Java程序源代码转换成Java的字节码;

  • 生成的机器码还是ARM 标准的指令集,没有华为芯片特定的指令;

  • 没有自己链接器,所以没有对应的优化。

(注:具体技术细节和实现请研究方舟编译器开源网站)

可以这样理解:目前,方舟编译器已经是中国第一个能把部分核心技术自研出来并大规模商用的尝试,有着深远的意义。

作者:你发姐

编辑:杨燊

监制:王俊稷

来源:华为官网、机器学习研究会订阅号、 CSDN、36Kr

“第一财经广播”

文章来源: https://twgreatdaily.com/zh-hans/xlDC9mwBJleJMoPMw-gi.html