» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[电脑] 华为开源方舟编译器的原因找到了!

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

如何看待方舟编译器 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 编辑 ]


TOP

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到机器码的编译这部分没开源,所以也不知道现在的方舟能不能直接编译到鸿蒙。
其他的还没细看。



TOP

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

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


TOP

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

zlib的开源声明有啊,就和liscense一起放着,难道我错过什么了吗?
最初放出来的没有,结果3分钟后紧急闭源修改了,再放出来的就好了。

TOP

引用:
原帖由 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月的绿盟开发者大会上,华为将完整方舟编译器代码开源,让开发者可编译使用。


所以还行。。。

TOP

发新话题
     
官方公众号及微博