关于方舟编译器的一些猜想和疑问

        关于方舟编译器,有一些疑问:

  • 方舟编译器支持多语言统一编译,这个听起来很新鲜,不过用过clang的同学应该对llvm都不陌生吧?一个框架+多个编译器前端+多个编译器后端,这是llvm的基本架构。多个前端用于对不同语言的支持,将不同语言编译为统一的中间代码;多个编译器后端,用于将这些统一的中间代码编译为不同平台下的机器码。不知道方舟的实现跟llvm的差异有几多?

  • 方舟能够给App提速的原因,按照官方的说法是摒弃了android的JIT(just in time)和JIT+AOT(ahead of time),JIT边解释边执行效率当然低,所以后来android采用了AOT,把解释的过程放在了安装时,但这样占用空间大,安装也慢。所以android又选择了JIT+AOT在系统空闲的时候去将dex码解释为本地机器码。而方舟则是把解释的过程放在了编译时。这样用户体验就会非常好了,安装也不慢,运行也快,很完美。

  • 但是,这个也不新鲜啊,熟悉Android的同学应该知道dex2oat这个工具吧,安卓在编译系统应用的时候,就是直接编译成了本地机器码。

  • 方舟会不会是把dex2oat放到了android sdk里,在应用开发者编译APK的时候,直接将应用中的dex编译成了本地机器码呢?然后再修改一下PMS中包安装的一些逻辑。也就是说,此时开发者开发的应用和Android中的系统应用在编译机制上是没有本质区别的。从这个角度看:方舟 = android sdk + dex2oat。

  • 当然,这个意义还是很大的,让一般的普通应用也享受到了系统应用的待遇(仅仅是编译方面),应该点赞。

  • 如果仅仅是这样,华为未免有些水,我们再大胆设想,华为是不是把dalvik和art虚拟机统统干掉了。方舟直接把应用编译成类似于linux上的bin文件(这个并不难,参考llvm),然后华为Android系统的编译环境也改成方舟。这样,整个华为的手机系统已经跟Linux没有什么大的区别了,在运行时完完全全的一个linux环境,没有虚拟机,没有java字节码。但开发者在开发的时候,使用的还是java或者kotlin。

  • 不过还有一种说法,方舟是用于服务器编译的基于gcc的编译套件,那这个就没必要说了。

        额,暂时就想到这么多…

你可能感兴趣的:(方舟编译器)