发布信息

十年方舟,再造安卓没错,华为为此准备了十年

作者:软荐小编      2023-12-24 09:06:58     236

十年方舟,重建安卓

是的,华为为此准备了十年。

2009年,华为启动5G基础技术研究时,也开始创建编译组,第一批国内外研究人员加入。

2013年,华为针对基站领域推出了自研编译器HCC,并正式提出编译器框架概念。

2014年,国内外多名专家加盟华为,方舟项目正式启动。

2016年,编译器与编程语言实验室成立。

2019年,华为方舟编译器正式上线!

十年来,解决的每一个问题都包含了华为软件工程师的全力投入,每一次进步都值得铭记。

2017年5月,第一个Java程序“Hello World”在方舟编译器上成功运行。

2017年8月的一个清晨,在华为实验室里,项目组连续几天24小时不间断地研究这个问题,却始终看不到成功返回信息。 无奈之下,工程师将所有通讯数据打印出来方舟软件,逐字节检查,最后发现字节顺序不一致。 修正后,华为方舟跑出了第一个Android后台服务DiskStatus,这标志着Android心脏移植手术进入了实用阶段。

2018年春节前一周,方舟编译器跑遍了Android系统所有后台服务,并成功移植到手机上。 当晚,大家聚集在实验室的机房,等待第一个启动画面加载成功的神圣时刻。 秒针滴答作响,仿佛一个世纪过去了,屏幕终于亮了起来。

欢呼、拥抱、一蹦三尺高,项目组成员们按捺不住,流下了激动的泪水。

接下来,项目组在除夕夜启动了方舟编译手机的Beta测试。 大年初一的一大早,总架构师从编译器编译出来的运行程序中发出了第一条新年贺词:

新年快乐,方舟好运!

方舟软件_方舟软件是干啥的_方舟软件下载

当“方舟”出现在P30发布会上时,它就在中国软件行业“爆炸”了。 无数软件从业者一开始持怀疑态度,后来查明方舟真相后惊叹不已……这些都是华为软件工程师十年来一点一滴“啃硬骨头”的致敬!

事实上,方舟不再是传统意义上的高级语言到机器代码的“万能翻译器”,而是一个编译和操作系统。

一方面,方舟编译器在Java领域首次杀掉了虚拟机。 这也是软件史上第一次将Java/C/C++等混合代码编译成机器代码并直接在手机上运行。 它彻底告别了Java的JNI额外开销,彻底告别了虚拟机GC内存回收导致的​​应用进程断线,大大提高了操作流畅度。 如果说最新的Android系统是和谐列车,那么方舟编译的Android系统就是高铁、“复兴号”。

华为手机通过方舟编译器直接替换了Android系统-服务器的所有后台服务。 仅这一点就足以让华为EMUI比其他安卓系统快了一步。 据华为官方测试,方舟编译器使手机系统操作流畅度提升高达24%,系统响应性能提升44%。 购买过P30系列的用户应该已经体验过。

另一方面,方舟编译器以空间换取性能,直接将编译器的代码优化搬到了开发者环境。 不再受手机硬件资源限制,为代码优化提供无限可能。

另外,经测试,新浪微博快车版APP经过方舟编译,操作流畅度提升高达60%。

解决Android四大难题,源于Android、优于Android、超越iOS、全面兼容Android。 这就是华为方舟编译器的使命!

为杀虚拟机而生

从项目开始,方舟编译器就是要彻底消除虚拟机。 这在历史上是从未有过的。

SUN发明Java语言时,就是依靠虚拟机这个“万能中转站”来筛除各种硬件的差异,方便相同的代码在多个平台上运行。 因此,Java是目前最流行的高级编程语言之一。 这么多年了,从来没有人能够干掉一个虚拟机,可见难度很大。

那么方舟编译器是如何彻底杀死虚拟机的呢?

最关键的是能够直接将Java代码编译成010101机器码。

这个想法在理论上是可行的,但在现实中却太困难了。 历史上也有过一些尝试,比如现在流行的Android ART虚拟机。 这些尝试可以提前翻译Java语言中的很多静态语义,但是大部分动态语义仍然没有解决,不得不留给虚拟机。

所谓静态语义可以理解为确定的语言和含义,比如“我是张三”。 动态语义需要在上下文中理解,例如“尽可能多地穿”。 穿多还是少取决于是冬天还是夏天。 比如大家熟悉的微博、京东等APP的开屏广告就需要用到动态语义。 很多知乎高手认为,像静态语义那样编译动态语义根本不可能。

为了实现这一目标,华为软件工程师对自己的要求非常高。 这涉及到很多细节,从对象模型的设计,到每一位的用途,每一个对象的元数据(描述数据的数据),以及每一次的编译。 优化的设计经过了无数次激烈的讨论和重塑。

最终,方舟编译器通过编译阶段和运行阶段的双向支持,解决了静态编译和动态语义的两个最大难点:一是数据模型设计,二是如何获取动态信息运行时高效。 方舟编译器团队基本遍历了Java的动态语义,并进行了大规模数据建模。 同时,编译时动态语义分析的准确性大大提高,尤其是涉及到跨语言调用时。 此外,华为还设计了核心专利动态语义匹配机制,有效降低运行时动态语义的开销。

正是因为突破了这两大难点,方舟编译器才能将Java代码编译成机器可以直接执行的语言。 经过华为方舟编译器的应用不再需要在手机上编译,彻底告别虚拟机,从而带来媲美甚至超越iOS的Android体验。

代码“万国通”

95%的顶级应用程序是用Java/C/C++等混合语言编写的。 方舟编译器的第二个使命是消除混合语言之间相互调用带来的JNI开销。

基于对多种编程语言的深刻理解和广泛的研发积累,华为方舟编译器团队实现了前所未有的混合语言统一中间表示IR。 这相当于同一个人能够听懂全世界的语言,所以我们把这个革命性的突破叫做,代号“万国通”。

那么方舟编译器是如何使用统一的IR来表示各种语言的呢?

IR是一种用于表示代码的数据结构。 它是一种“协议和公共语言”,用于在编译器和相关工具的各个模块之间传输信息。 它也是程序变换和编译优化的各种算法的载体。 它是编译器的“大脑”,直接决定编译器的最终效果。 其难度是最高的。

华为方舟编译器团队精心研究IR五年,逐步摸清了“大脑”中每一根神经、每一个神经元的信号模式,并在此基础上发明了一套核心专利。 这使得不同语言的代码能够在开发者环境中统一编译成同一套可直接执行的机器代码,从而彻底消除混合语言相互调用的开销。

在你的代码中添加一个飞机引擎

除了IR之外,编译器还有一个非常重要的价值,那就是代码优化。

华为的方舟编译器直接将代码优化从手机端转移到开发者环境,未来也可能转移到云端。 利用开发者环境更强大的计算能力,可以实现更先进、更精密的优化算法,实现更强大的优化效果。 在很多具体场景下,代码优化的提升甚至可以是颠覆性的。

这就相当于给你的APP在方舟里安装了一个飞机发动机,让你的APP跑起来像飞起来一样!

值得一提的是,开发者在使用方舟编译器时不需要改变原有的编码习惯。 开发者可以开发自己的代码优化算法,也可以只使用方舟编译器预设的算法进行代码优化。 未来华为还将提供代码调优工具。 开发者可以根据工具的优化建议选择调整代码方舟软件,配合方舟编译器获得更好的执行结果。

可以想象,未来广大APP开发者使用方舟编译器后,消费者的体验将达到前所未有的水平。 这对于整个Android生态来说,是前所未有的福音!

方舟软件_方舟软件下载_方舟软件是干啥的

Stop World,再见 Android 延迟

方舟的第四个使命是解决Android虚拟机GC内存回收造成的“Stop World”。

目前Android手机内存资源不足时,GC会直接停止所有应用程序,所以偶尔会遇到莫名其妙的卡顿情况。

方舟编译器采用引用计数(RC,Reference Counting)来进行内存的实时回收,并采用特殊的环消除算法(消除对象相互引用导致的不回收问题)来避免GC集中回收。 系统卡住了。 与GC相比,Ark的内存回收是实时的而不是集中式的,并且不需要暂停应用进程,极大地消除了滞后性。

如果把内存回收比作打扫房间,那么GC的策略就是有一个专门的清洁工。 如果房间里垃圾太多,他就会请大家出去,然后让大家打扫完再回来。 方舟的RC要求每个人收集自己的垃圾并在使用后清理干净,保持清洁而不影响人们的正常活动。

软件有一个大家都熟悉的死循环,即计算机在运行一个无限循环的程序,消耗掉所有的计算机资源。

这种“死循环”在软件中称为“环引用”。 为了防止手机内存被环引用“吃掉”,方舟编译器引入了注解的“警告”标记来注释基础类的环。 当然,Java程序员也可以在业务代码中标记循环。 经过大量的实际验证,方舟的机制可以减少大多数程序中循环的出现。

另一方面,方舟编译器在运行状态引入了高效的循环回收机制,可以选择性、智能地回收APP占用的内存。 这相对于传统的循环回收算法来说是一个很大的改进。

Stop World,Android 滞后,再见!

正是因为Ark实现了混合语言的统一中间表示和完全静态编译,消除了虚拟机,消除了JNI开销,告别了GC内存回收的“间歇性”滞后等诸多开销。 同时,也为开发者优化代码提供了更广阔的舞台。

华为即将全面开源方舟编译器。 届时,开发者可以使用方舟编译器作为开发工具,打开移动应用生态和体验的新大门。

科技的进步离不开全世界无数科学家和工程师的奉献。

产业繁荣,开放是唯一出路!

相关内容 查看全部