智驾峰会
您正在使用IE低版浏览器,为了您的雷锋网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
此为临时链接,仅用于文章预览,将在时失效
人工智能开发者 正文
发私信给杨鲤萍
发送

1

华为方舟编译器正式开源,脱离 GitHub 实现自主托管

本文作者:杨鲤萍 2019-09-09 17:57
导语:出于安卓,胜于安卓

雷锋网 AI 开发者按:近日,华为的方舟编译器终于迎来了开源,而且开源代码还是承载在自家的官网上。面对这样一个肩负「出于安卓,胜于安卓」使命的编译器,自问世以来就备受大家的关注;此次开源,更是吸引了大众的目光。

那么到底这个编译器从开发至今都经历了哪些挑战?获得了哪些机遇?现在又拥有怎样的魔力?它对于华为而言,意味着什么?特此,雷锋网 AI 开发者将华为方舟编译器相关内容整理及编辑如下。

华为方舟编译器正式开源,脱离 GitHub 实现自主托管

十年磨剑,华为「方舟」

为了造这艘「方舟」,华为磨剑十年。

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

  • 2013 年,华为推出面向基站领域的自研编译器 HCC,并正式提出编译器框架构想。

  • 2014 年,众多海内外专家加入华为,方舟项目正式启动。

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

  • 2019 年,华为方舟编译器正式面世。

据华为官方介绍,方舟编译器是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包含编译器、工具链、运行时等关键部件。它是首个完全替代语言虚拟机的静态编译器,并且完全不需要解释器,同时还兼顾 Java 开发效率和 C 语言运行效率。

8 月 31 日下午 17 时,方舟编译器开源官网上线——OpenArkCompiler(开源方舟编译器),开放了框架源码,开发者们可以下载源代码包,了解熟悉方舟编译器的架构思想。

OpenArkCompiler 介绍

  • 面向多设备、支持多语言的统一编程平台。

  • OpenArkCompiler 是来自华为方舟编译器的开源项目。

OpenArkCompiler 四个技术特点

  • 能能够将不同语言代码编译成一套可执行文件,在运行环境中高效执行:

支持多语言联合优化、消除跨语言调用开销;

更轻量的语言运行时;

软硬协同充分发挥硬件能效;

  • 支持多样化的终端设备平台

  • 开源计划

  • 编编译器框架代码开源

OpenArkCompiler 开源范围

  • 编译器 IR+中端语言实现

OpenArkCompiler 开放能力

  • 框架开源供参考学习,了解方舟编译器架构及框架代码

  • 开发者可构建出完整编译器工具链,支持 Java Sample 程序编译(非应用)

脱离GitHub,自主托管

目前方舟编译器的源代码已经都放出来了,但并没有在 GitHub 开源。目前方舟编译器的代码托管在华为云与码云平台(https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler/home),在未来走向开放治理以后,将按照所挂靠机构的模式来托管。如下所示为开源代码的界面,里面包含了众多代码和文档等文件。

华为方舟编译器正式开源,脱离 GitHub 实现自主托管

图 1 方舟开源代码界面

本次方舟编译器开源的是编译器框架部分源码,包括编译器中间表示(IR,Intermediate Representation)和语言编译实现,同时搭配编译器其他二进制组件,实现 Java 程序到 aarch64 汇编指令的编译过程??⒄呖苫诳创?二进制,编译构建出编译器工具链,尝试对 Java 程序进行编译。

社区参与者可以通过框架源码学习方舟编译器的编译器中间表示(IR)及基本的中端编译框架,熟悉方舟编译器的架构思想,并参与诸如对编译器中端优化的贡献??⒄咴蚩赏ü胪泄芷教ú斡肷缜毕?,包括文档贡献和代码贡献,同时也可在此平台上反馈相关问题和需求。

华为方舟编译器正式开源,脱离 GitHub 实现自主托管

图 2 方舟编译器当前开源范围

尽管方舟编译器暂时只支持 Java 和 Kotlin 程序输入,但官方消息称,方舟编译器还在持续演进中,也将陆续实现更多功能的开源。根据之前华为在开发者大会上公布的信息,作为鸿蒙 OS 的重要工具,方舟编译器从 2019 年 8 月开始,将分步骤持续进行开源。具体的开源计划如下:

  • 2020 年:开始开源 Java 编译器工具链,支持 Java 程序编译。

  • 2021 年:开始开源 JavaScript 编译器工具链,可用于 JS 程序的编译。

架构示意图

华为方舟编译器正式开源,脱离 GitHub 实现自主托管

图 3 方舟编译器架构示意图

当前方舟编译器支持 Java/Kotlin 程序字节码的前端输入,其它编程语言的支持(如 C/C++/JS 等)还在规划中,方舟编译器的中间表示(IR)转换器将前端输入转换成方舟 IR,并输送给后端的优化器,最终生成二进制文件,二进制文件与编译器运行时库文件链接生成可执行文件,在方舟的运行环境中就可执行该文件。

方舟编译器 IR 是支持程序编译和运行的中间程序表示。程序源代码中的任何信息对于程序分析和优化都是有帮助的,所以方舟 IR 的目标是尽可能完整详细地提供源程序的信息。关于方舟编译器 IR 的详细信息,可以参考(https://www.openarkcompiler.cn/document/frameworkDesgin)。

左秒虚拟机,右杀 JNI

华为宣称,方舟编译器可将安卓应用流畅度最高提升 60%,提升手机系统操作流畅度高达 24%,系统响应性能提升 44%。

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

「出于安卓,胜于安卓,超越 iOS,并且全面兼容安卓」,是方舟编译器的使命。目前,方舟已经可以实现「混合语言的统一中间表示和完全静态编译」。这也正是它主要的两大优点:

  • 方舟编译器首次在 Java 领域将虚拟机去掉了,也是软件史上首次将 Java/C/C++等混合代码一次编译成机器码直接在手机上运行,彻底告别 Java 的 JNI 额外开销,采用内存回收机制,使操作流畅度大幅提升。

  • 方舟编译器用空间换性能,因此可直接将编译器的代码优,并化搬到了开发者环境;使得开发者不再被手机端的硬件资源所限制,为代码优化提供了无限可能。

我命由我不由天

正如华为自己所写:「方舟编译器开源打响了鸿蒙 OS 开源的第一枪。通过持续的开放、开源,华为将把自己在软件方面的技术能力不断贡献给行业,同时在开源社区中,更多的开发者可以参与并贡献自己的力量,共同推进基础软件的发展?!?/p>

方舟编译器的开源并非偶然,而是华为一直精心运营的一步棋。当这步棋落下的那一刻,也代表了华为进一步实现技术自主权的时候;而正是这样的独立,才让华为在面对美国一次又一次的强势打压之下,依然保持了顽强、不屈服的态度。

华为方舟编译器正式开源,脱离 GitHub 实现自主托管

图 4 方舟编译器合作第三方应用

根据官方信息,华为坚持每年将销售收入的 10% 以上投入到研发中,技术成果不断涌现,软件能力持续增强;并且在此基础上,华为也保持着开放、合作、共赢的态度,不断推进产业创新与开放生态。从官网的介绍,我们可以看到目前已有 46 款 APP 使用了方舟编译器进行优化与性能提升,其中包括我们常用的支付宝、优酷、微博等应用。

现在方舟编译器正式开源,或许也正意味着华为正在从开源领域的主要参与者变成引领者。

官方网站:

https://www.openarkcompiler.cn 

代码托管网站:

https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler    

码云镜像仓库地址:

https://gitee.com/harmonyos/OpenArkCompiler 

雷锋网(公众号:雷锋网) AI 开发者

雷锋网原创文章,未经授权禁止转载。详情见转载须知。

华为方舟编译器正式开源,脱离 GitHub 实现自主托管
分享:

文章点评:

表情
最新文章
请填写申请人资料
姓名
电话
邮箱
微信号
作品链接
个人简介
为了您的账户安全,请验证邮箱
您的邮箱还未验证,完成可获20积分哟!
请验证您的邮箱
立即验证
完善账号信息
您的账号已经绑定,现在您可以设置密码以方便用邮箱登录
立即设置 以后再说
男人味正版126期6肖 磐石市| 绵竹市| 宣汉县| 万载县| 综艺| 寻乌县| 平武县| 铜陵市| 深泽县| 武夷山市| 宁化县| 宿迁市| 闸北区| 揭东县| 松江区| 定结县| 西林县| 江津市| 浦县| 三门峡市| 恩施市| 武山县| 邛崃市| 苍梧县| 泊头市| 吴桥县| 湾仔区| 河间市| 西华县| 琼海市| 崇州市| 宁夏| 昌宁县| 天台县| 旬阳县| 洪雅县| 福州市| 靖边县| 安塞县| 通化县| 石狮市| 榆社县| 古田县| 武强县| 剑阁县| 达尔| 思南县| 景洪市| 宜川县| 礼泉县| 牙克石市| 兴义市| 镶黄旗| 河池市| 花垣县| 同江市| 白城市| 阿拉善右旗| 拜泉县| 连山| 巴东县| 界首市| 潼关县| 南开区| 桐柏县| 沁阳市| 临湘市| 南川市| 咸丰县| 武穴市| 霍州市| 米脂县| 上杭县| 汉中市| 舟山市| 临城县| 永登县| 安远县| 当雄县| 乌海市| 四子王旗| 德惠市| 平邑县| 同仁县| 潞西市| 黔江区| 南漳县| 湖口县| 文安县| 新竹市| 镇宁| 衢州市| 玉树县| 潍坊市| 克东县| 南木林县| 天台县| 锡林郭勒盟| 洪湖市| 萨嘎县| 永寿县| 中卫市| 韩城市| 伊吾县| 呈贡县| 酉阳| 南雄市| 浦江县| 周口市| 颍上县| 郓城县| 舟曲县| 固镇县| 随州市| 油尖旺区| 濉溪县| 凤台县| 洱源县| 双辽市| 板桥市| 汾西县| 曲阳县| 巴马| 石泉县| 天镇县| 岳池县| 泰来县| 绥芬河市| 乌什县| 达州市| 宁城县| 华蓥市| 永新县| 江安县| 城固县| 建宁县| 蒙山县| 宝鸡市| 阜城县| 凉城县| 正定县| 历史| 永善县| 德庆县| 石狮市| 琼中| 武汉市| 苏尼特右旗| 宣化县| 兴仁县| 蛟河市| 密山市| 农安县| 肇庆市| 佛教| 方城县| 清涧县| 育儿| 汉沽区| 牡丹江市| 周宁县| 周口市| 青岛市| 缙云县| 乌审旗| 巴马| 绥阳县| 博白县| 孙吴县| 昭通市| 靖江市| 囊谦县| 丰城市| 镇康县| 张北县| 仪征市| 福鼎市| 清新县| 平果县| 巴南区| 清远市| 永修县| 巨野县| 通州市| 外汇| 揭西县| 馆陶县| 宜宾县|