查看原文
其他

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

梁宇宁 CSDN 2019-10-30

【CSDN 编者按】8月31日,华为方舟编译器正式开源。据华为内部人士表示,华为员工为了这次开源,连续30小时没有合眼。

早在在8月9日的华为开发者大会上,华为消费者业务CEO余承东,就宣布将在8月底开源方舟编译器的框架代码。

如今,方舟编译器如期开源!作为鸿蒙OS的重要组成部分,“方舟”的开源,也意味着鸿蒙OS的开源不远矣!

那么,方舟编译器的开源,就有哪些亮点?CSDN特邀上海鉴释科技创始人、前华为人&原方舟编译器立项负责人之一梁宇宁为你新鲜解读!

作者 | 梁宇宁
责编 | 胡巍巍
出品 | CSDN(ID:CSDNnews)


背景、近况和原因

最近由于中美关系紧张,华为进实体名单而受制裁,这两天华为的方舟编译器正式开源有引起了国内媒体的很大反响,比在三月份产品发布会时发布还更激烈。

不由自主的勾起了我还在华为时关于方舟编译器项目的回忆。也许时间背景和两年前不一样,项目的历史责任就会变得不一样。

自中兴华为给制裁后,芯片和操作系统自主研发一直在媒体覆盖中,唯独我一直百思不得其解,为什么没有对编程技术自主研发的报道。

也许编程技术真的对15亿人的大部分一点都没有印象也看不见摸不着,太遥远了。下来讲讲当时为什么华为要做编译器。 


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

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

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

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

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

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

举个例子,苹果是有自己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 标准的指令集,没有华为芯片特定的指令;

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

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


编程技术核心在中国的现状


编程技术核心如编程语言和编译器。在计算机科学里的并不是一个新鲜的新的概念,但是是一个国家的软件核心竞争力的基础。这些理论已经存在至少半个世纪,如以下是一个图关于编程语言的历史。

图片来源:https://www.computerhistory.org/press/gallery/

编程语言和编译器核心部件设计近十年里由于开源的流行,我国是基本没建立成有效的商业引导的技术能力积累。

编程语言和编译器端到端从零开始的设计理论和产品工程实现和商用能力应该还是空白的,但不缺乏局部技术优化能力。 

当然能把这些都能做成的并非单纯是一个公司或国家主导几年就可以的,需要几十年产业里的创新和商业价值引导,市场的耐心,教育的支撑才能达成的。这些技术在美国的发展可以做参考的作用。

方舟编译器已经是中国第一个能把部分核心技术自研出来并大规模商用的尝试,有着深远的意义。期待有生之年看到这些技术自研能力在中国的发展如同美国。

作者简介:梁宇宁,现任上海鉴释科技公司CEO,主要精力投入到计算机科学的核心基础技术中,以帮助工程师提高编程知识,并优化全球软件的质量和安全。

【END】
 热 文 推 荐 

仅用 10 天设计的 JavaScript,凭什么成为程序员最受欢迎的编程语言?

如何攻克 C++ 中复杂的类型转换?

马云马斯克激辩:AI 是威胁还是被低估了?

☞程序员易踩的 9 大坑!

☞99年少年12岁时买下100枚比特币, 如今却将所有积蓄压在一个不知名的代币上,还放话将超越Libra!

☞强推!阿里数据科学家一次讲透数据中台

☞冠军奖3万元!CSDN×易观算法大赛开赛啦

☞可惜了,你们只看到“双马会”大型尬聊

☞如何写出让同事无法维护的代码?

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存