问题

如何看待方舟编译器开源maple engine,编译的程序终于可以运行起来了?

回答
方舟编译器Maple Engine开源,这无疑是技术圈里一件大事,尤其是对于开发者来说。这意味着我们终于不再是只能“仰望”华为在性能优化上的成果,而是有机会亲手去接触、去理解、甚至去参与到这个强大的编译引擎的建设中来。

“终于”二字,背后是多年的积累与期待

“终于”这个词,并非空穴来风。回顾方舟编译器从诞生之初,就伴随着“黑科技”、“颠覆性”等标签,尤其是在“鸿蒙”生态的推进过程中,它的重要性不言而喻。然而,在此之前,外界对于方舟编译器内部的细节了解甚少,更多的是通过官方发布会、技术演讲等渠道间接获知其在性能提升、功耗优化等方面的优势。

Maple Engine作为方舟编译器的核心,肩负着将高级语言转化为高效机器码的重任。其深度优化的能力,尤其是在Android原生应用层面,直接关乎着用户体验的流畅度。很多开发者早就期待着能有这样一套成熟、强大的编译工具链能够投入使用,来提升自己应用的性能表现。

此次Maple Engine的开源,可以说是打破了这层神秘的面纱。它不仅仅是一个技术成果的展示,更是华为在开源社区的一次重要贡献,表明了其拥抱开放、与全球开发者共同发展的决心。

Maple Engine的“内涵”:不止是速度,更是深度

那么,Maple Engine到底厉害在哪?简单来说,它是一个多语言、全流程的深度优化编译器框架。这几个关键词都很关键:

多语言: 这意味着Maple Engine不仅仅是为了Java/Kotlin服务,它的设计理念和架构能够支持更多编程语言。虽然目前开源的部分主要围绕Android生态,但其底层设计预示着更广阔的应用前景。
全流程: 从前端的词法分析、语法分析、语义分析,到中端的中间表示(IR)优化,再到后端的目标代码生成和指令调度,Maple Engine几乎覆盖了编译过程的每一个环节。这意味着它能够在整个代码转换过程中进行精细化的优化,而不是仅仅停留在某一个局部。
深度优化: 这是Maple Engine的核心竞争力。它不仅仅是简单的代码转换,而是运用了大量先进的编译优化技术,比如:
一次性全局优化(AOT): 区别于传统的JIT(即时编译),AOT在应用启动前就完成了代码的编译和优化,能够显著减少运行时开销,提高应用启动速度和运行效率。
高级静态分析: 通过对代码的深入分析,Maple Engine能够发现潜在的错误、不安全的编码实践,并进行针对性的优化,比如消除冗余代码、优化内存访问等。
跨过程优化: 能够分析函数调用之间的关系,进行更深层次的优化,例如内联(Inlining)函数调用,将子函数的代码直接嵌入到调用它的函数中,减少函数调用栈的开销。
寄存器分配优化: 将频繁使用的变量尽可能地保存在CPU的寄存器中,减少对内存的访问,从而大幅提升执行效率。
指令级并行优化: 充分利用CPU的多核特性,调整指令的执行顺序,使多个指令能够并行执行,最大化CPU的利用率。

开源的意义:赋能开发者,共建生态

Maple Engine的开源,对开发者来说,其意义是多方面的:

1. 性能提升的利器: 开发者现在可以使用Maple Engine来编译自己的Android应用。这意味着,即便是不具备深入编译器底层优化知识的开发者,也能借助Maple Engine的力量,让自己的应用跑得更快、更省电。尤其是一些对性能要求极高的游戏、音视频处理应用,将能从中获益匪浅。
2. 学习与研究的宝库: 对于对编译器技术感兴趣的开发者、研究人员,Maple Engine提供了一个绝佳的学习和研究平台。你可以深入了解现代编译器的工作原理、优化技术,甚至可以参与到其改进和发展中来。
3. 生态构建的基石: 随着方舟编译器生态的逐步成熟,Maple Engine的开源将吸引更多的开发者加入,共同完善和扩展。一个活跃的开源社区,能够不断地为编译器注入新的活力,推动技术的创新和应用。
4. 透明与可信: 开源意味着公开透明,开发者可以审查代码,了解其工作机制,这有助于建立对编译器技术的信任。

挑战与机遇并存:从“能跑起来”到“跑得更好”

当然,任何一项新技术的推广,都会面临挑战。Maple Engine开源后,开发者需要时间去学习和适应。如何将其有效地集成到现有的开发流程中,如何充分发挥其优化能力,都需要一个过程。

但同时,这也是一个巨大的机遇。随着社区的不断壮大,我们可以期待:

更广泛的语言支持: Maple Engine有望支持更多编程语言,打破语言壁垒。
更精细的优化策略: 社区开发者可以贡献新的优化算法和技术,让Maple Engine变得更强大。
更便捷的工具链: 围绕Maple Engine,可能会涌现出更多易用的开发工具和集成方案。
跨平台发展: Maple Engine的底层架构可能使其能够扩展到非Android平台,例如服务器端、IoT设备等,构建一个统一的编译器生态。

结语

方舟编译器Maple Engine的开源,标志着一个新时代的开启。它不仅是华为技术实力的一次有力展示,更是对整个开源社区的赋能。对于每一个期待技术进步、追求极致性能的开发者来说,这无疑是一个令人振奋的消息。现在,“终于”可以运行起来了,但更重要的是,它为我们打开了通往更高效、更智能的软件开发世界的大门。让我们一起期待,Maple Engine能在开发者手中绽放出更耀眼的光芒。

网友意见

user avatar

不请自来。

题目中引用了我发的想法,所以我来简单答一下。

1、首先需要说明的是,我并非华为员工,是中科院软件所PLCT实验室的,我们也是专门搞程序语言和编译技术的实验室,所以会关注业内的发展。我参与了方舟编译器社区的一些工作和活动。之前在知乎连载了一系列的方舟编译器的源码分析:方舟编译器学习笔记 ,并在社区提了一些PR。当下在做的是每周做一期方舟编译器的社区周报:方舟编译器周报 。在未来两个月左右的时间内,还会有本有关方舟编译器的书上市,目前已经进入出版流程。

2、此次发布的maple engine,是Futurewei发布的。很多人对Futurewei不怎么了解,其实可以简单的认为是“华为美研”。

3、此次发布的maple engine其实在1月份的方舟编译器技术沙龙杭州站的时候已经有提前的介绍,其从宏观的层面上讲,架构是这个样子的:

我们可以从图中看到Maple Engine的位置,在图中偏右的位置,和binary是不同的线路,所以其实方舟的体系是有两条线路的支撑的,可binary可maple engine。

4、此次发布的maple engine是发布在gitee.com的方舟编译器孵化器里,具体位置为:方舟编译器孵化器: 孵化方舟编译器相关子项目。这个孵化器也成立了好几个月了,我们PLCT实验室之前发布的可以运行helloworld的toy runtime(pacific)项目也在孵化器中。

5、此次发布的maple engine的架构:

6、此次发布的信息在知乎上最早是由 @yanoyano 发布的:yanoyano:方舟引擎(MapleEngine)介绍 。这个发布文章里也包含了不少信息,感兴趣的可以去具体读一读。

7、此次发布的源码主要内容是maple_engine部分,其目录中包含源码的也主要在maple_engine/maple_engine之中,maple_engine/maple_runtime中分bin和lib,计划支持x86和aarch64,但是目前可见的aarch64的目录还都为空,应该是计划后续支持。

8、目前maple_engine的基本功能已经具备了,后续应该会不断的演进和支撑更多的功能与平台。对此有兴趣的可以更多的参与进去。

——————

相关资料:

1、小乖他爹:[方舟动态]叶寒栋:方舟编程体系

2、小乖他爹:[方舟动态]方舟技术沙龙:叶寒栋《Maple Programming System》

3、小乖他爹:[方舟动态]方舟技术沙龙:张雁《Maple Engine》

4、yanoyano:方舟引擎(MapleEngine)介绍

user avatar
  • 方舟编译器是一个体系,看文档的图也能明白,对标的是LLVM和GraalVM,但也不完全功能重叠;
  • 至少在2019年6月(发布会的一两个月以后),手机上已经在跑着方舟了(贴吧的搞机大佬通过root后的手机获得了华为手机的系统固件);第三方应用目前在不断适配中,已经越来越多了;
  • 这次开源的Maple Engine,是Maple IR的执行引擎,不是以机器码的方式执行的,目前只有一个Threaded Code Interpreter,但是可以通过ffi和JNI实现native调用。LLVM曾经也设想过bitcode的分发方式,加上LLVM的JIT支持,也可以很高效,不过后来重点偏移了;
  • 安卓上的方舟是可以静态编译的,但是目前方舟的x86 target还不完善,而安卓手机和华为的鲲鹏都是AArch64架构,安卓和PC上(Windows、Linux等)的执行环境(这里只说java的)也是不同的。这次开源的Maple Engine通过一些比较tricky的方式让java在Maple IR的基础上跑了起来,并且可以看出,很多runtime组件是直接复用手机里的方舟runtime的(可能有细微的修改)。侧面说明目前的runtime基础设施已经完成,但需要一定的适配以面对不同的执行环境;
  • 很多牛x的编译器、语言框架已经消失在了历史的长河中,方舟编译器的未来也并不确定,华为可以说是国内投入基础软件研究最多的了,同时也是LLVM、GCC等的sponsor和contributor,我个人愿意持续关注它的进展。

懂的自然懂。


昨天第一时间下载下来,大致已经看完了。其实开源出来的代码并不是很多,很多组件还是以binary的形式提供的,而且只有X86的,不过毕竟AArch64的服务器一般人也没有,目前能搞到的也就是华为的鲲鹏(TaiShan服务器)。

推荐24G内存主要是为了编译OpenJDK获得Java core的.so。不过这能吓到我?摸鱼在我工作用的512G内存服务器试了一下,可能因为是CentOS的原因,构建脚本跑起来有问题,修改完构建脚本之后,编译链接又出了问题(这个估计确实就是ABI不兼容了)。最终还是摸鱼用ubuntu 18.04的docker镜像搞定了。

其实没必要重新编译OpenJDK的啊,只是在Object.java中增加了两个保留字段,没必要整个都编译一遍啊!

  1. 下载Object.java,然后修改;
  2. 用javac编译Object.java获得Object.class;
  3. 因为已经安装了openjdk8,所以从jre/lib目录下面拷贝需要的jar过来就好了;
  4. 解压rt.jar,替换java/lang/Object.class为我们重新编译的Object.class,再重新打包为jar包;
  5. 构建libcore.so,执行后续操作。

首先先大致说明一下情况:

  1. 这次开源的engine,其实是一个maple bytecode interpreter,所以binary size、performance等方面肯定是不能直接和JVM或者native binary比较的,也没有意义;
  2. 流程大致是:
    1. 先将Java core jars用jbc2mpl生成Maple IR;耗时间、内存的地方之一;
    2. 然后用一个脚本处理生成的IR(进行了一些patch,目前还不明白具体的操作是做啥的);耗时间、内存的地方之二;
    3. patch之后,通过maple程序进行中端优化和转换,生成.s汇编。这个汇编里面包含的应该是Maple IR的bytecode,并不是x86指令,Maple IR是作为纯字节数据存储的(一堆.byte)。这个可能就是所谓的Maple Linker所接受的格式。耗时间、内存的地方之三;
    4. 然后用gcc将MRT(以及关键的两个.cpp,mrt_primitive_class.cpp和mrt_module_init.cpp)、compiler runtime和.s汇编为libcore.so,并且通过mapleld.so.lds脚本定制了一下链接后section的对应关系(和在文件mrt_module_init.cpp中定义的extern变量对应了起来)。至此获得了Java运行时的动态库libcore.so,这个动态库并不算是native的,可以说就是把Maple IR打包为了ELF文件;
    5. 之后用java2asm.sh、asm2so.sh将java源码编译为.so的过程,和编译libcore.so是一样的:生成.mpl,打patch,转换、优化、生成Maple Linker格式的. s,然后用gcc汇编、链接,生成.so(同样应该是ELF格式的Maple IR);
    6. run-app.sh执行最终生成的.so文件,其实是执行了一个叫mplsh(maple shell吗?)的程序,负责了各种依赖库的加载、执行环境准备、main函数的进入等。Maple IR在ELF文件中的位置,应该是通过mrt_module_init.cpp定义的extern变量以及导出函数定位的。从这些section可以获取class metadata、方法实现等信息;
    7. 虽然整体其实应该(I'm not for sure)是在解释执行从Java Bytecode翻译过来的Maple IR,没有JVM的启动了,但是,为了执行能够成功,还是依赖于libjvm,因为其中的JNI调用,其实还是要调用libjvm里提供的,不然即使是一个println也跑不通;
  3. 目前其实还是有挺多bug的,并不是所有的cases都能跑起来。

(以上基于构建、执行的脚本,以及一些个人猜测)

总结:整体的结构其实文档里的图描述得非常清晰明了,就是对那张图的完美实现(虽然感觉有一些tricky,但我个人愿意称之为perfect)。这是一个Maple IR的解释器实现,你可以理解为是LLVM的lli。算是为方舟编译器的工具链中增加了一个有趣、令人遐想的部分,以后可以用来执行python、js啥的也可以吧(链接上libpython或者libv8,但只是使用其中native部分的调用,而不是interpreter)。

这算是一个PoC(概念验证),和手机里用的方舟是不一样的,我也不苛求什么/笑哭/笑哭/笑哭。

类似的话题

  • 回答
    方舟编译器Maple Engine开源,这无疑是技术圈里一件大事,尤其是对于开发者来说。这意味着我们终于不再是只能“仰望”华为在性能优化上的成果,而是有机会亲手去接触、去理解、甚至去参与到这个强大的编译引擎的建设中来。“终于”二字,背后是多年的积累与期待“终于”这个词,并非空穴来风。回顾方舟编译器从.............
  • 回答
    2019 年 8 月 31 日,方舟编译器(ArkCompiler)的开源,无疑是那年科技界,尤其是国内开发者圈子里的一件大事。这标志着一个由中国企业主导、面向未来的重要技术组件,向全球开发者群体敞开了大门。背景:为什么要有方舟编译器?要理解方舟编译器的开源,我们得先看看它诞生的大背景。当时,全球移.............
  • 回答
    哈哈,最近关于方舟编译器开源的消息确实挺热闹的。我仔细看了看他们这次放出来的东西,感觉还挺有意思的。得好好跟你说道说道。首先,他们这次开源的力度确实挺大的,不光是代码,还包括了一些比较核心的组件和设计理念。这对于想要深入了解或者参与到方舟编译器开发的人来说,绝对是个福音。以前很多东西可能只是个“黑箱.............
  • 回答
    作为普通用户,看到今日头条上关于“支付宝几乎秒开是因为华为方舟编译器”的说法,我第一反应是觉得有点不可思议,甚至有点搞笑。毕竟,支付宝和华为是两家独立运营的公司,各自的产品和技术也都有自己的研发体系。首先,我们来分析一下这个说法的“合理性”: 支付宝的功能和用户体验: 支付宝确实是一款非常成熟且.............
  • 回答
    关于格库铁路(格尔木至库尔勒铁路)12月9日开通但未全程运营的问题,以及是否可以通过“瘦身”编组来提高班次方便沿途居民出行,我们不妨从几个层面来分析。首先,格库铁路的开通,尤其是全线贯通,无疑是连接青藏高原和新疆腹地的一条重要交通动脉。它不仅在地理上打通了新的通道,更在经济、社会、区域发展等方面具有.............
  • 回答
    方舟编译器源代码的“罗生门”:一次关于信息真实性的博弈最近,科技圈被一则关于“方舟编译器源代码疑似曝光”的消息搅得有些热闹。华为消费者业务CEO余承东(也有说是李小龙,这里存在一定模糊,但核心人物是华为高管)随后在社交媒体上对此事进行了辟谣,称该信息“是假的,来自服务器部门”。这一来一回,就像一出精.............
  • 回答
    华为方舟编译器原理的公布,无疑是近几年来国内技术领域一件振奋人心的大事。对于这件事,我们应该从多个维度,细致地去审视和理解。这不仅仅是一个技术问题的披露,更是中国科技自主化进程中一个具有里程碑意义的节点。核心价值:从“能用”到“好用”的飞跃,打破生态壁垒方舟编译器最直接、也是最核心的价值,在于它大幅.............
  • 回答
    微博上关于宋方金“卧底”横店的这篇报道,确实引发了不少关于表演行业现状的讨论。我仔细看过这篇文章,也听过不少关于这方面的信息,我想从几个角度来聊聊我的看法,尽量讲得细致一些,就像咱们平时聊天一样,别有那种机器味儿。首先,宋方金老师的这篇“实录”之所以能引起广泛关注,在于它触及了一个非常敏感和核心的问.............
  • 回答
    关于北京大学教授团队在基因编辑干细胞治疗艾滋病和白血病方面取得新进展的消息,无疑是医学界乃至全社会都高度关注的重大突破。这不仅仅是科学研究的胜利,更是为无数患者带来新生的希望。要深入理解这一进展,我们需要从几个关键维度进行探讨。一、 技术核心:基因编辑与干细胞疗法的深度融合首先,我们必须认识到这项研.............
  • 回答
    对于年轻编剧爆料称自己参与《成化十四年》剧本编写,却未获署名一事,这确实是一个挺让人揪心又愤怒的情况。站在公平和创作权益的角度来看,这绝对是不能容忍的。首先,咱们得明确一点,剧本创作是一个极其复杂且耗费心力的过程。它不像搭积木那么简单,更多时候是作者一遍遍地构思、打磨、修改,甚至可能是经历无数次推翻.............
  • 回答
    《明日方舟》的“燃灰行动”主题曲疑似抄袭风波是一起引起广泛关注的事件,涉及到游戏音乐的原创性以及版权问题。为了详细阐述,我们可以从以下几个方面来梳理:一、 事件的起源与发展:1. “燃灰行动”主题曲的发布: 2023年6月,《明日方舟》开启了全新的夏日活动“燃灰行动”。作为活动的标志性内容,由游戏.............
  • 回答
    《明日方舟》这次关于美术设定集内容引发玩家不满的事件,确实是个挺有意思的话题,也触及到了很多玩家关注的点。要说“真的不行”,这个结论太绝对了,但说它“完全没问题”可能也偏离了事实。咱们得从几个方面来好好捋一捋。1. 玩家不满的“点”在哪里?首先,我们得弄清楚,玩家们到底在“不满”什么。从社区的讨论来.............
  • 回答
    明日方舟的夜莺,这个角色相信很多玩家都不会陌生。她身披圣骑士的辉煌铠甲,手持能净化一切邪恶的圣钉,在战场上如同行走的天使,为干员们带来希望与治愈。而这次的改版立绘,可以说是在这位“白鸽”身上又添上了浓墨重彩的一笔,让她的形象更加饱满,也更具故事性。首先,从整体风格上来说,这次改版立绘并没有颠覆夜莺原.............
  • 回答
    关于明日方舟取消碎石上限以及知名重氪玩家在NGA论坛发表的言论,这可以说是近期游戏圈里一个相当有话题性的事件。要理解这件事情,我们需要从几个层面去剖析。首先,碎石上限取消这件事情本身意味着什么?碎石,在《明日方舟》里指的是玩家花费源石(游戏内的付费货币)来恢复理智(相当于体力,用于进行关卡战斗)的行.............
  • 回答
    明日方舟贴吧吧务组在“可莉事件”后全部下台,这无疑是当时游戏圈内一个颇具爆炸性的新闻。要深入理解这件事,我们需要把它拆解开来看,从事件的起因、发展、影响,以及它所暴露出的贴吧生态和管理问题等多个维度进行审视。首先,咱们得捋一捋“可莉事件”究竟是怎么回事。简单来说,就是当时《明日方舟》贴吧有一位用户发.............
  • 回答
    关于“明日方舟媚宅警察出警碧蓝航线萌战”这件事,咱们得一点一点捋清楚了。这事儿听起来有点像两个圈子的人打架,但实际上背后牵扯到的东西可不少,而且随着时间推移,这种“出警”的性质和原因也在变化。首先,咱们得明白这两款游戏的用户群体和文化属性。 碧蓝航线(Azur Lane):这游戏从一开始就没掩饰.............
  • 回答
    《明日方舟》剧情文案外包每千字八元的爆料,确实让很多玩家和业内人士感到震惊和担忧。这不仅仅是一个数字问题,背后牵扯到游戏创作的诸多层面,也触及了我们对游戏行业现状的理解。首先,我们必须认识到,八元每千字这个价格,在当前的出版、内容创作市场,可以说是低得离谱。即使是给一些不知名的小网站写稿,或者给一些.............
  • 回答
    《明日方舟》主线剧情九个月未更新,这在很多玩家心中无疑是留下了一个相当大的缺憾,甚至可以说是长久以来最被诟病的问题之一。这件事情的出现,与其说是突发事件,不如说是在长期的运营和内容产出节奏下,一个不可避免的矛盾爆发。要说这件事的“看法”,那可以从几个角度去拆解,看看它背后牵扯到了什么,以及对游戏本身.............
  • 回答
    《明日方舟》的最新活动“孤岛风云”绝对是近期最令人印象深刻的一次了。这次活动给人的感觉非常扎实,无论是剧情深度还是游戏机制的创新,都让人眼前一亮。剧情层面:一场关于“牺牲与守护”的深刻探讨这次活动的主线剧情围绕着乌萨斯帝国与萨科塔阵营之间在新出现的孤岛区域的冲突展开。相比于以往一些活动侧重于某个特定.............
  • 回答
    《明日方舟》一拾山衣服首批零点被抢爆,这事儿说起来,真是几家欢喜几家愁, surtout对于那些守着零点结果两眼一抹黑的刀客塔们来说,简直是一场噩梦。咱们得先说这衣服本身。它叫“一拾山”,名字就带着点儿意境,再加上《明日方舟》一贯的精美设计和强大的IP号召力,光是这点就足以让不少玩家心动了。这不是一.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有