MapleEngine 会成为鸿蒙的 Visual Studio 吗?
时隔一年,华为的鸿蒙操作系统即将发布 2.0 版本,据悉这一次华为将会把鸿蒙的代码公开托管至第三方平台,让广大程序员一睹鸿蒙的真容。鸿蒙将给终端市场带来怎样的影响仍未可知,但结合历史来看,成功的操作系统往往拥有配套完善的开发组件,以帮助开发者快速入门以投入相关生态的开发,从而建立起完善的生态体系。
比如在微软的 Windows 系统生态下,有微软自研的编程语言 C#,开发集成环境 Visual Studio(包括编译器),各种 API 的详述文档等等。多年的积累让 Windows 桌面程序有无数种开发方法,开发者遍布全球。
又比如在苹果的 iOS 和 Mac 系统生态下,有苹果自研的 Swift 编程语言,开发集成平台 Xcode, Clang + LLVM 编译器等。通过网罗年轻一代的天才程序员,走精英开发者路线的苹果也能把自己的操作系统生态搞的风生水起。
作为旨在突破国外技术封锁的操作系统,鸿蒙 OS 要想构建属于自己的健康生态,配套的开发者工具链是必不可少的。去年 9 月,华为开源方舟编译器部分源码;今年 4 月又再次开源方舟引擎 MapleEngine,首次将鸿蒙开发者生态工具链的蓝图向外界公布,展示了鸿蒙 OS 未来生态构建的雏形。
下文由 MapleEngine 项目参与者,资深编译器专家叶寒栋撰写,介绍了方舟引擎 MapleEngine 的项目概况,同时描述了围绕方舟引擎展开的一系列开发者编程体系和未来的规划。
作者:叶寒栋
方舟引擎也叫 MapleEngine,是方舟编程体系的重要环节。如下图所示,方舟编程体系的整体目标是构建一个软件开发的全栈,包括编程语言、多语言前端、编译器、执行引擎以及右下角一堆工具链。整个方舟体系依靠 MapleIR 贯穿前后,MapleIR 是程序的中间表示,是编程体系中程序的表达方式。编译器把MapleIR转换成机器码或者保留 MapleIR 中间码,方舟引擎则担负着执行该中间码的任务。可以认为方舟引擎和 JVM 类似,但超越了JVM,因为它不再是执行单一的 Java 程序。理论上说,只要能翻译成 MapleIR 的程序,都可以由方舟引擎执行。
方舟体系是采用统一 IR 来实现跨平台的项目,业界有很多类似的,成熟或者不成熟,各有特点,此处不赘述。但是,之所以要开发方舟编程体系则是有其技术、历史和环境等多方面因素。具体到方舟引擎,则是出于以下几点原因,同时也是方舟引擎的独特之处。
方舟引擎的第一个特点,它不光可以是一个孤立的软件,更重要的是方舟体系中的一环。从最早开发方舟编译器开始,我们瞄准的就是完整的方舟编程体系,而不是一个孤立的编译器。这很好理解,在如今的背景下,特别是多种业务多种体系结构的复杂要求,只有一个自主的完整的全栈设计才可能实现长期支撑多种业务。依靠零散的开源软件而组装起来的系统,是低效的、不可持续的,特别是无法长期演进,甚至不知道如何演进和朝哪个方向演进。
编程体系中的每一个层次都要明白自己是为了实现一个“顶天立地”的全栈系统而存在的。顶天指的是对应用程序以及编程语言的理解和支持,立地指的是发挥硬件架构的能力并进而指导硬件演进。举个例子,方舟引擎的重要作用之一是为了将来设计高级语言做准备,这意味着引擎要有灵活适配多种语言特性的能力,特别是动态特性。这和一般的虚拟机只是为单一的语言而设计是不同的。因此,方舟引擎原始动机是与众不同的。
方舟引擎的第二个特点是它的输入文件以 MapleIR 为格式。理论上,任何一种高级语言的程序,经过多语言前端的翻译,转换为 MapleIR,则可以交给引擎执行。当然,这是一个非常美好的愿景。现实中肯定有不少具体问题,并不是所有事情都可以一蹴而就的。举个简单例子。在IR 上同样的一条指令,比如抛异常,在不同的语言规范里面很可能有不同的语义。因此,引擎将为这些差异性的地方设计不同的实现,所以大家会看到不同的语言支持库。这些对软件设计和实现提出了挑战。这是支持多语言的必然代价。无论如何,一个追求一定程度通用的引擎带来的巨大好处是无法忽视的。对于高级语言的设计和实现来说,这是非常有益的。
方舟引擎的第三个特点是和它设定的目标业务有密切关系。方舟编程体系希望能够服务异构分布式的系统。一个标准的 MapleIR 软件包,借助方舟引擎可以在不同的设备上运行。目标系统涵盖的设备可以包括从 IoT、手机到电视机等。每种设备的能力、体系结构和规格差异很大。每个领域的程序开发所适用的编程语言和模型各自差异很大。因此,要求引擎能够比较自如的对自身进行按需适配,并能直接或者通过操作系统间接发挥硬件能力。
方舟引擎的原始诉求很多,上面是比较明显的。从整个方舟编程体系来看,我们希望通过统一的 MapleIR 来贯穿所有软件模块,对上支持多种语言,对下发挥多种体系结构的能力。特别是上图最右下角的大量的衍生工具链,都将以 MapleIR 为接口,在软件开发生态环境中实现光滑链接。
完整的方舟编程体系非常庞大,目前已经成型的包括编译器和引擎,其中引擎还只是初级阶段。但是,其中任何单一的部件都可以独立使用,也可以多个配合使用,也可以再开发以实现自己的用途。愿和大家一起为之努力!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
更新!万字长文带你拿下九大排序的原理、Java 实现以及算法分析
0. 前言 大家好,我是多选参数的程序锅,一个正在捣鼓操作系统、学数据结构和算法以及 Java 的失业人员。数据结构和算法我已经学了有一段日子了,最近也开始在刷 LeetCode 上面的题目了,但是自己感觉在算法上还是 0 ,还得猛补啊。 今天这篇基于之前的 8 大排序算法基础之上,增加一个堆排序,也就是这么 9 个排序算法:冒泡排序、插入排序、选择排序、归并排序、快速排序、堆排序、桶排序、计数排序、基数排序。它们对应的时间复杂度如下所示: 排序算法 时间复杂度 是否基于比较 冒泡、插入、选择 O(n^2) √ 快排、归并、堆排序 O(nlogn) √ 桶、计数、基数 O(n) × 整篇文章的主要知识提纲如图所示,本篇相关的代码都可以从 https://github.com/DawnGuoDev/algorithm 获取,另外,该仓库除了包含了基础的数据结构和算法实现之外,还会有数据结构和算法的笔记、LeetCode 刷题记录(多种解法、Java 实现) 、一些优质书籍整理。 ★ 本文的图很多都是从极客时间王争老师专栏那边拷贝过来或者截图过来的,少部分图是自己重新画的。为什么不全都换成...
- 下一篇
附件在线预览组件 WDA 1.2.6 发布,支持图片预览功能
当前版本v1.2.6,更新内容: 功能增加:增加图片文件在线预览 图片支持jpg、jpeg、gif、png格式,使用viewer.js组件进行在线预览 图片文件在线预览:
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2更换Tomcat为Jetty,小型站点的福音