百科问答小站 logo
百科问答小站 font logo



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

  

user avatar   shiningning 网友的相关建议: 
      

不请自来。

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

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   wang-peng-cheng-63-31 网友的相关建议: 
      
  • 方舟编译器是一个体系,看文档的图也能明白,对标的是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(概念验证),和手机里用的方舟是不一样的,我也不苛求什么/笑哭/笑哭/笑哭。


user avatar   dr-london 网友的相关建议: 
      

识字率

明代:

明朝对社学的入学年龄规定:“民间幼童十五以下者。”即15岁以下的孩子都可参加,入学时也不需要考试,招生数额也没有限制,凡是愿意读书的,都可以来参加。

《明史·杨继宗传》中记载了这么一句话,即:“成化初,用王翱荐,擢嘉兴知府.......大兴社学,民间子弟八岁不就学者,罚其父兄。”

明代小说出版业繁荣,有大量的人购买这种休闲通俗读物。

传教士记载:利玛窦等合法传教士的著作,他们不约而同地记载道:他们惊讶地发现明国老百姓识字率很高(而那个时候他们使用二十多个拉丁字母的西班牙葡萄牙母国的识字率可能还不如用几千个汉字的大明),并且把识字率高的原因归功于两点:1.中国人特别注重文化教育2.中国各地方言差异大,要互相理解必须靠文字作为桥梁。

清当局:

第一,生员不得言事;

第二,不得立盟结社;

第三,不得刊刻文字。

第四,大兴文字狱

第五,篡改历史文献

第六,禁毁和篡改汉语著作

通过以上手段,经过两百年黑暗统治中国人识字率终于达到历史最低的 1% (清当局学部在1909年的统计,当时中国人的识字率不足1%)



user avatar   pi-ma-you-xi-feng-78 网友的相关建议: 
      

mix a刚消停,又一次出现了当初前排高赞全体辣椒水洗眼睛、用类似的通稿在尬吹的盛景。

莲花白号称消除信息不对称,然而新鲜出炉的百度百科在透明OLED屏幕(还不是电视)把LG和国内维信诺、京东方的贡献完全抹杀,只留下***和小米……

哪怕雷米这次发布的玩意,完成度比5年前首发的那款概念机还低,哪怕绿地等地产大佬早就批量用上了商用货架透明屏幕,哪怕18年平昌冬奥会“北京8分钟”几十块深圳壹品光电的透明LED屏大放异彩并且会后接到了若干商用订单……

还是无法阻挡雷米又一次自定义“第一”,如同至今狂吹mix的根本就不承认多年前夏普无边框手机完成度远高于其割韭菜的玩具。


user avatar   ikkiz-70 网友的相关建议: 
      

很难,因为差不多已经把能拍的题材都拍差不多了。

讲丧尸爆发后末日求生的有《行尸走肉》

把丧尸和古装结合的《王国》

讲丧尸和人类谈恋爱的《温暖的尸体》

还有最经典的《生化危机》

印象中还有丧尸有思维的,就是史皇拍的那部。

还有丧尸和纳粹的。

太多了,但都是换汤不换药,没意思……




  

相关话题

  为什么 LLVM/Clang 能迅速发展起来? 
  创造编程语言应该学习什么语言?设计编程语言最好是用C/C++吗? 
  华为手机遭制裁,最坏情况是否为退出手机市场? 
  华为正式公布 P50 系列机型,尚未确定上市时间,你对这款产品有何期待,前景如何? 
  华为手机相册的照片集体消失,但是手机内存却没有变?那么相册的照片去哪了!?大神求解答!感恩感谢!! 
  锤子科技与华为公司实力差距有多大? 
  华为是否是在割韭菜? 
  如何看待华为新款笔记本将支持超声波操控?还有哪些值得关注的信息? 
  华为手机是如何做到中高端机型在一些消费者眼里优于小米手机的? 
  从产业经济学的角度来看,美国制裁华为等中国公司会产生哪些影响? 

前一个讨论
广州和深圳是怎么跻身「北上广深」之列的?
下一个讨论
如何评价Unity中国特供版一天一激活?





© 2024-05-08 - tinynew.org. All Rights Reserved.
© 2024-05-08 - tinynew.org. 保留所有权利