方舟编译器最新技术细节

简介: 方舟编译器最新技术细节

image.png

编译器是连接人类世界与机器世界之间的一座桥梁,同时也扮演着“翻译者”的角色。它将程序员使用的高级语言翻译成机器能明白的机器码,从而使得手机能够听懂并执行人类的指令。现有的安卓系统主要是在手机上进行编译,往往有部分程序需要一边转换一边执行,影响程序执行的效率。那么如何突破这个瓶颈呢?请往下看~

image.png

image.png

【十年磨砺,终得硕果】编译器优化对程序运行性能及用户体验有显著影响,它的开发,从系统软件到应用软件,需要投入大量的时间和精力进行研发,这一板块在国内尚属“无人区”。华为已经在研发编译器的路上积累了多年,早至2009年华为就创建了编译组,到2013年推出自研编译器HCC,对于华为在移动通信领域领先起到了关键作用,这背后是华为人前赴后继的努力和无数次尝试,终于,在2019年方舟编译器正式与大家见面。

image.png

方舟编译器,安卓性能革命突破】当前大部分安卓应用都涉及不同开发语言,不同语言形成的代码需要在运行态中进行协同从而产生额外消耗。而方舟编译器是业界首个多语言联合优化的编译器,开发者在开发环境中可以一次性将多语言统一编译为一套机器码,运行时无需产生跨语言带来的额外消耗,并可以进行跨语言的联合优化,提升运行效率。

image.png

安卓自身的编译技术在不断的发展,但始终需要在运行中依赖虚拟机来进行动态编译和解释执行,对系统资源消耗较大。而方舟编译器在开发环境中就可以完成全部代码的编译,手机安装应用程序后无需依赖虚拟机资源,即可全速运行程序,带来效率上的极大提升。举一个例子:EMUI 9.1仅仅对系统组件System Server应用了华为方舟编译器后,就带来了系统操作流畅度提升24%,系统响应性能提升44%的收益。

image.png

【方舟编译器,高效的回收机制】内存管理是程序开发与运行时需要重点考虑的部分,也和系统流畅度息息相关。安卓在内存回收上采用集中回收机制,发声全局回收时更需要暂停应用,这也是随机卡顿的根因之一。而方舟编译器提供了更高效的内存回收机制,回收时无需暂停应用,随时用随时回收,大大提高运行速度。

image.png

image.png

【方舟编译器,应用级编译优化】代码优化是编译器最为核心的功能,也是评判一个编译器优劣最重要的标准。当前由于安卓应用使用了虚拟机机制,难以面向不同应用对虚拟机进行针对性的灵活优化。安卓ART的AoT和JIT动态编译因为是运行在手机上,受资源所限,因而只能使用简单的优化算法。而方舟编译器由于是在应用开发阶段进行编译,所以可以允许不同应用灵活采用不同的编译优化方案,而且因为在开发环境编译不会受到手机性能的限制,可以使用更多先进的优化算法,从而使得每个应用的性能达到最佳。

image.png

image.png

【简单易用,开放开源】华为在持续进行技术创新的同时,也注重将技术成果回馈行业,华为方舟编译器在开发构建的阶段为开发者提供快速的集成编译环境,大大降低了开发者的学习成本和使用成本,令产业与更多用户受益。华为方舟编译器会从2019年开始全面开源,邀请整个产业和生态来一起共同关注和提升安卓性能体验。

image.png

继华为P30系列发布会方舟编译器开源后,将在2019年8月的华为终端开发者大会宣布方舟编译框架代码开源,后续会在2019年11月的绿盟开发者大会实现完整方舟编译器代码开源。

华为十年前就开始布局编译器,其在基础研发的高持续投入,的确是其他厂商所不及的。随着华为完整闭环的形成。哪有有一天失去了谷歌,失去了安卓,相信华为也能搭建出自己的一套生态环境。



相关文章
|
2月前
|
JavaScript 数据管理 编译器
揭秘 ArkTS 与 TypeScript 的神秘差异:鸿蒙系统开发者的必备知识与实战技巧
【10月更文挑战第18天】ArkTS 是华为为鸿蒙系统(HarmonyOS)推出的开发语言,作为 TypeScript 的超集,它针对鸿蒙系统的分布式特性和需求进行了优化和扩展。ArkTS 强化了分布式数据管理、类型系统、编译与运行时性能,并支持声明式 UI 和专为鸿蒙设计的 API,使开发者能够更高效地开发跨设备协同工作的应用。
174 6
|
2月前
|
Rust 安全 Linux
Rust-01 Hello Rust 10分钟上手编写第一个Rust程序 背景介绍 发展历史 环境配置 升级打怪的必经之路
Rust-01 Hello Rust 10分钟上手编写第一个Rust程序 背景介绍 发展历史 环境配置 升级打怪的必经之路
55 0
Rust-01 Hello Rust 10分钟上手编写第一个Rust程序 背景介绍 发展历史 环境配置 升级打怪的必经之路
|
4月前
|
Rust 开发者
揭秘Rust编程:模块与包的终极对决,谁将主宰代码组织的新秩序?
【8月更文挑战第31天】在软件工程中,模块化设计能显著提升代码的可读性、可维护性和可重用性。Rust 作为现代系统编程语言,其模块和包管理机制为开发者提供了强有力的工具来组织代码。本文通过对比模块和包的概念及使用场景,探讨了 Rust 中的最佳实践。
45 2
|
4月前
|
机器学习/深度学习 Rust 编译器
神秘编程语言 Rust 背后究竟隐藏着怎样的生态宝藏?框架、工具链与社区资源大揭秘!
【8月更文挑战第31天】Rust 语言凭借卓越性能与内存安全性吸引了众多开发者。其生态系统包括多种框架(如 Actix-web、Rocket 和 Warp)、强大的工具链(如包管理器 Cargo 和高效编译器)以及丰富的社区资源。Cargo 简化了项目管理,编译器提供详尽错误信息并支持增量编译,而活跃的社区则为学习与交流提供了广阔平台,涵盖官方文档、博客、论坛及大量 GitHub 开源项目。随着更多开发者的加入,Rust 生态系统将持续繁荣发展。
93 0
|
7月前
|
JavaScript 前端开发 编译器
TypeScript的编译器、编辑器支持与工具链:构建高效开发环境的秘密武器
【4月更文挑战第23天】TypeScript的强大力量源于其编译器、编辑器支持和工具链,它们打造了高效的开发环境。编译器`tsc`进行类型检查、语法分析和代码转换;编辑器如VS Code提供智能提示、错误检查和格式化;工具链包括Webpack、Rollup等构建工具,Jest、Mocha等测试框架,以及代码质量和性能分析工具。这些组合使用能提升开发效率、保证代码质量和优化项目性能。
|
7月前
|
缓存 编译器 测试技术
简化 CMake 多平台兼容性处理:高效开发的秘诀
简化 CMake 多平台兼容性处理:高效开发的秘诀
262 0
|
7月前
|
Rust Java 编译器
从Rustup出发看看Rust语言的编译生态
1. Rust和LLVM的关系是怎样的? 2. Rustup中targets是什么,为什么可以安装多个? 3. Rust在windows上为什么需要安装Visual studio? 4. Rust工具链有哪些工具?
122 1
|
7月前
|
JSON IDE Swift
Swift语言的实践编程
Swift语言的实践编程
74 3
|
JavaScript 前端开发 Java
谈一谈 OpenHarmony 的方舟编译体系
谈一谈 OpenHarmony 的方舟编译体系
|
存储 自然语言处理 前端开发
夯实基础,编译器原理前端部分浅析
如果说计算机网络、操作系统、数据结构这些是编程必学基础,我能理解,现在连编译器原理都是必备基础了吗?是的,我们太习惯于从高级语言学起了,反而忘了C、C++、Java 这些高级语言是如何一层一层解析直至被计算机读懂的。正本清源,我们对编译器的认知,应该提到和操作系统、数据库、浏览器、编程语言、算法这些编程基础技能同一水平。