ashx需要编译吗_方舟编译器代码初步解析

方舟编译器的总体架构

69d62ea3b7167a51a6532a64d13e6294.png

官方演示结果如何?

200fe7db943255af7e059e680eb2b384.png

开源了哪些代码?

首次开源范围是IR、RC和多语言设计思想等,用于与业界、学术界沟通交流。

未开源编译前端、后端和对其他语言的支持

e00236da3f93f409e886c91c4586f3b3.png

Driver是干什么的?如何实现的?

driver在代码里面是src/maple_driver,生成的目标文件是maple,依赖

libmplipa/libmplir/libmplme/libmplmewpo/libmpl2mpl 以及闭源库libmplphase.a/libmempool.a/libmaple_driverutil.a

maple就是用于处理mpl文件

1)me –quiet

2) mpl2mpl –quiet –regnativefunc –maplelinker

3)mplcg –quiet –no-pie –verbose-asm –maplelinker --fpic


虚方法表和接口表是如何生成的?

虚方法-

750c5fe28d57a4cea299e763d5792016.png

55685cd814718423b029c35213ad2fc3.png

接口表-

8049dee7b08054a484dc8c8cef012e6f.png

dd5b67879c486ceda7a2fa1a8f37563e.png

693e90aa6f7a670d9e314cc44efd7632.png

22afd21e824bf8f4c2e53455ef8dbd45.png

RC是啥?如何处理的?

引用计数,一种内存管理计数,保存对象被引用的次数,当为0的时候,将对象释放。

提供了31个API支持RC操作:

MCC_IncRef_NativeRCFast

MCC_DecRef_NativeRCFast

。。。

在me_rc_lowering之中,大量使用了这样的操作

6e7f4d1ad307c7297752c84cbf0550b5.png

67d3603078a799ac75fb5f4ef7168896.png

mplt如何处理的?

由DriverRunner::Run()发起

由ProcessMpl2mplAndMePhases具体实现

该函数使用InterleavedManager创建各个phase,由ModulePhaseManager和

MeFuncPhaseManager分别各自运行,最终是由每个注册的phase运行

而每个phase,就是某些优化措施

ef436a8e95e747bab517aaf9eae41e3a.png

我分析的结论如何?

•开源协议是木兰License

•基于clang + llvm前端编译技术,C++11

•IR是基于Maple IR

•Ninja、gn是编译工具

•开源部分不多,目前仅能编译maple,pml部分还没有释放出来,是以.a的方式提供

jbc2mpl/mplcg是以二进制形式提供,java2jar就是一个javac和打包的脚本

•Java-core的mplt没有提供,samples完整编译有问题


我实践的情况如何?

•代码可以编译吗?

可以编译生成出maple,其他compile组件以二进制提供

•代码可以运行吗?

对于HelloWorld.java的测试显示,可以编译出HelloWorld.jar,

但是无法继续编译出二进制文件,原因是缺少libjava-core.mplt,还需要释放相应文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值