Board logo

标题: [电脑] 华为开源方舟编译器的原因找到了! [打印本页]

作者: masterfish    时间: 2019-8-31 12:59     标题: 华为开源方舟编译器的原因找到了!

看到知乎的一个关于方舟源码的一个解析:

如何看待方舟编译器 8 月 31 日开源? - 知乎
https://www.zhihu.com/question/343431810/answer/808727474

可以看到几点:
【1】最关键的是中间码:maple IR,看分析,几乎包括了所有c/c++/java/JavaScript支持的类型,所以是几乎是以暴力型的方式把几种编程语言合并到了一起,工作量惊人;
【2】有部分编译用了点捷径,比如java,是先用现有的javac编译为bytecode,再转换为自己的maple IR;
【3】不少代码中出现比较严重的问题,比如zlib的源码把其原来的版权声明去掉,换成华为自己的了,现在普遍的观点是新手用工具自动处理的时候出了问题,估计这也是昨晚开源了之后又迅速关闭的原因,现在应该在处理这个问题,然后会再公布出来;
【4】华为这个工作量虽然大,但是分析其技术并不高明,估计开源,也有鼓励大家贡献的意思。

[ 本帖最后由 masterfish 于 2019-8-31 13:03 编辑 ]
作者: 推土机    时间: 2019-8-31 14:09

posted by wap, platform: Chrome
大陆人开源代码?
作者: hmilychen    时间: 2019-8-31 14:23

posted by wap, platform: Samsung
食屎啦华为
作者: 卖哥    时间: 2019-8-31 17:55

中间码这套东西很成熟,可参考的开源资料一堆没啥难度的。
开源是为了能借用其他开源资料,不过也别觉得会回馈,华为开源代码的可读性是出了名的差的。
作者: zdztony    时间: 2019-8-31 19:09

posted by wap, platform: Android
好了,方舟开源了。。。各位著名id可以开始抓华为的痛脚给予致命一击。
其实我不懂,准备看热闹。
作者: ffcactus    时间: 2019-8-31 20:24

posted by wap, platform: iPhone
引用:
原帖由 @hmilychen  于 2019-8-31 14:23 发表
食屎啦华为
用棒子手机的人真乃LOW中极品。2333

太LOW。
作者: gd08msplus    时间: 2019-8-31 21:00

posted by wap, platform: iPhone
坐等卖哥和看准帝
作者: masterfish    时间: 2019-8-31 22:13

posted by wap, platform: Android
看了一下文档,详细分析还要等真正大佬,简单说说几点:
1,目前开源的主要是中间语言maple ir,也就是说,无论什么语言,都要编译为这个maple ir,再转换为机器语言;
2,这个maple ir设计得一般,目前仅针对c/java做了细化,开源出来估计是让其他人可以加入其他的语言支持,另外,maple里有js的类型但对其函数型语言的支持还没看到,目前主要是对java的支持比较全面,估计也是因应android的APP开发的需要;
3,注意maple ir的对java的支持是在bytecode到maple ir,也就是说java源程序的编译到字节码还是需要原来的Java的编译器支持,看样子好像用的还是openjdk的编译器,不知道有没有扩充华为自己的支持;
4,原来华为说的,去掉java的垃圾收集器,从maple的设计来看,似乎还是有垃圾收集器,内存分配有直接从栈分配的,也有从gc分配的,明确提到其采用了引用计数的垃圾收集器,从源码看不到运行时,这部分还没开源,所以还不知道如何处理循环引用的问题;
4,从maple到机器码的编译这部分没开源,所以也不知道现在的方舟能不能直接编译到鸿蒙。
其他的还没细看。
作者: matao    时间: 2019-8-31 22:21

posted by edfc, platform: iPhone 8 Plus
引用:
原帖由 @卖哥 于 2019-8-31 17:55 发表
中间码这套东西很成熟,可参考的开源资料一堆没啥难度的。
开源是为了能借用其他开源资料,不过也别觉得会回馈,华为开源代码的可读性是出了名的差的。
卖哥又在空口评论了,你撸个中间码给我们看看
作者: 莱恩哈特鲁    时间: 2019-9-1 08:27

posted by edfc, platform: iPhone Xr
引用:
原帖由 @masterfish 于 2019-8-31 22:13 发表
posted by wap, platform: Android
看了一下文档,详细分析还要等真正大佬,简单说说几点:
1,目前开源的主要是中间语言maple ir,也就是说,无论什么语言,都要编译为......
有这能力和时间的为什么不给llvm做贡献?华为这玩意不太可能有外部贡献者的
作者: 卖哥    时间: 2019-9-1 09:29

引用:
原帖由 莱恩哈特鲁 于 2019-9-1 08:27 发表
posted by edfc, platform: iPhone Xr

有这能力和时间的为什么不给llvm做贡献?华为这玩意不太可能有外部贡献者的
为了控制入口赚钱呀。
就像为啥谷歌是做安卓而不是给J2ME做贡献?
作者: 莱恩哈特鲁    时间: 2019-9-1 09:49

posted by edfc, platform: iPhone Xr
引用:
原帖由 @卖哥 于 2019-9-1 09:29 发表
为了控制入口赚钱呀。
就像为啥谷歌是做安卓而不是给J2ME做贡献?
我说的是外部贡献者,不是华为
作者: 卖哥    时间: 2019-9-1 09:53

引用:
原帖由 莱恩哈特鲁 于 2019-9-1 09:49 发表
posted by edfc, platform: iPhone Xr

我说的是外部贡献者,不是华为
那不是一样的么,给llvm做贡献,华为也能白捡呀。
作者: masterfish    时间: 2019-9-1 10:02

引用:
原帖由 莱恩哈特鲁 于 2019-9-1 08:27 发表
posted by edfc, platform: iPhone Xr

有这能力和时间的为什么不给llvm做贡献?华为这玩意不太可能有外部贡献者的
给llvm贡献对自己没有好处,如果华为的系统真的占据国内手机的半壁江山,那么就会有人研究如何给这个编译器加入能有利自己的功能了。
作者: 绝赞好评    时间: 2019-9-1 13:02

posted by wap, platform: iPad
国内这些个大公司的KPI开源项目多了去了,也就这项目正好趁着贸易战炒作了一波而已,凭华为的技术力量还是歇歇吧,本质上就是个富士康一样的代码血汗工厂,它的唯一竞争力就是往死里压榨码农出来的廉价软件支持方案
作者: zdztony    时间: 2019-9-1 14:41

posted by wap, platform: Android
引用:
原帖由 @绝赞好评  于 2019-9-1 13:02 发表
国内这些个大公司的KPI开源项目多了去了,也就这项目正好趁着贸易战炒作了一波而已,凭华为的技术力量还是歇歇吧,本质上就是个富士康一样的代码血汗工厂,它的唯一竞争力就是往死里压榨码农出来的廉价软件支持方案
给你点赞。。。终于等到了。
虽然说了一堆文不对题的话。
作者: tobewind    时间: 2019-9-1 14:47

posted by wap, platform: Android
中午也看了一下

zlib的开源声明有啊,就和liscense一起放着,难道我错过什么了吗?
作者: masterfish    时间: 2019-9-1 16:51

引用:
原帖由 tobewind 于 2019-9-1 14:47 发表
posted by wap, platform: Android
中午也看了一下

zlib的开源声明有啊,就和liscense一起放着,难道我错过什么了吗?
最初放出来的没有,结果3分钟后紧急闭源修改了,再放出来的就好了。
作者: manmanwan1    时间: 2019-9-1 17:23

来了来了,还是你坛真实
作者: tobewind    时间: 2019-9-1 18:29

posted by wap, platform: Android
引用:
原帖由 @masterfish  于 2019-9-1 16:51 发表
最初放出来的没有,结果3分钟后紧急闭源修改了,再放出来的就好了。
喷了 这算是发布事故了
作者: masterfish    时间: 2019-9-1 18:37

引用:
原帖由 Epilogue 于 2019-9-1 17:06 发表


据说是假开源
知乎有个分析,不全是假的:

https://zhuanlan.zhihu.com/p/80693868
引用:
编译结束之后在out/bin目录之下共有四个可执行文件:java2jar、jbc2mpl、maple和mplcg,src/bin目录也有同样的四个文件。其中java2jar、jbc2mpl和mplcg三者都是install的时候直接从src/bin目录直接copy过来的,只有maple应当是编译出来的,install的时候反向copy回src/bin目录了(前文有介绍)。
简单来说:
【1】java2jar是类似于javac和jar的联合体,要将XXX.java文件编成XXX.class文件,然后打包成XXX.jar文件。这个里面就是直接用openjdk的javac编译为bytecode,用jar打包为jar文件;
【2】jbc2mpl是将.class文件或者是.jar文件转化为mpl或mplt格式的一个工具。按照LLVM的分层习惯的话,这就类似于LLVM的前端,将程序转化为中间层表示。
【3】maple则是针对方舟编译器的中间表示语言的一个工具。方舟编译器的中间语言本身就叫maple。从maple的可选参数我们可以看到,它主要是针对maple的一些操作,在maple之中还提供支持run jbc2mpl\me\mpl2mpl2\mplcg。简单来说就是相当于汇编,可以直接运行 。
【4】mplcg应该是支持对.mpl格式的输入文件,进行优化、调试以及后端代码生成的工具。

可惜上面四个都不能运行。

不过按照华为的时间表:
8月,华为将开源方舟编译框架代码,供开发者研究参考。
11月的绿盟开发者大会上,华为将完整方舟编译器代码开源,让开发者可编译使用。


所以还行。。。
作者: xueada    时间: 2019-9-1 18:41

posted by wap, platform: Android
引用:
原帖由 @绝赞好评  于 2019-9-1 13:02 发表
国内这些个大公司的KPI开源项目多了去了,也就这项目正好趁着贸易战炒作了一波而已,凭华为的技术力量还是歇歇吧,本质上就是个富士康一样的代码血汗工厂,它的唯一竞争力就是往死里压榨码农出来的廉价软件支持方案
辱卖哥了




欢迎光临 TGFC Lifestyle (http://bbs.tgfcer.com/) Powered by Discuz! 6.0.0