转叶寒栋分享:方舟支持C语言编译新功能开源啦!

自2019年8月开源以来,方舟编程体系已经陆续实现了编译器、引擎和调试器的开源,编译器的重点功能主要集中在Java应用程序静态编译上。在《方舟编程体系》一文中,提到了方舟项目目标是要构建一个基于MapleIR的跨语言的编程环境,实现跨语言的全局分析及优化。举个例子,在现有的Java编程环境下面,开发者经常需要同时编写Java和C语言程序,通过JNI相互调用,这两种语言之间目前是不直接互通的。方舟编程体系的终极目标之一就是要通过一致的IR来表述不同语言,并跨越语言进行全局优化。

本次开源发布的是对C语言程序的支持,是实现Java和C混合编译的基础。未来在方舟引擎中不光要对来自Java语言的IR代码进行JIT编译,也会支持对C或者C++语言的IR代码进行JIT编译。 


代码链接地址:
1.https://gitee.com/openarkcompiler-incubator/mapleall
2.https://gitee.com/openarkcompiler-incubator/maple_engine


本次开源内容主要限于O0的能力范围,针对C的O2以上的优化留待未来进一步开源。目前可以看到的是C语言的绝大部分常用特性的功能支持,暂不支持的特性有complex类型,packedstruct, long double和alloca的out-of-scope free。当前支持aarch64后端,并支持绝大部分gcc_torture用例。如配合一款第三方合作的C前端(该前端尚未开源,开源时间待定),可以正确运行spec2017的所有C语言整型用例。

在C编译器的开发过程中使用的是跟Java语言完全统一的MapleIR,存在差异的地方集中在中端针对一些特定的分析phase,如alias分析,根据语言的特性做一些微调,以及在后端补齐一些Java不存在的场景比如struct(非reference/pointer)的操作和传参与返回值等等。大部分的中后端phase都能够全部或者大部分重用。从Java编译扩展到C编译的过程工程量比较小,过程比较平滑。

下一步社区计划在Maple编译器上做更多的拓宽和深耕工作。广度上,一方面会尝试支持新的语言,进一步验证Maple基础平台的语言无关性,另一方面会增加对新后端如RISC-V的支持。深度上,社区会尽快开源O2分析与优化phase,性能对标LLVM/GCC,同时利用统一的Maple表示,布局跨语言全局优化。

从去年八月底方舟正式开源以来,方舟社区开源代码从50K增长到170K,累计6.9K Star,并孵化5个相关子项目,感谢方舟社区所有伙伴的参与和贡献!方舟编译器是方舟编程体系的重要一环,目前展现的是静态编译,未来随着方舟引擎的完备,大家可以看到方舟编译器在各种AOT或者JIT编译时的运用,以及众多依赖于编译分析的软件分析和优化工具。

叶寒栋,2020年10月

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值