0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

技术探讨之请教方舟编译器的十个问题

Linux阅码场 来源:Linuxer 2019-11-29 14:34 次阅读

缘起

华为的方舟编译器终于走出开源的第一步,官方地址为https://www.openarkcompiler.cn/home 。我个人于今年4月在机械工业出版社出版了“深入理解Android”系列书籍的最后一本书——《深入理解Android Java虚拟机ART》一书。

这本书围绕Android系统中Java虚拟机ART做了详尽的源码分析。其中,第六章更是以全书最多的篇幅从字节码到机器码的编译过程进行了详细介绍。

写书时,我一直耿耿于怀国内在计算机基础核心技术上缺乏领军公司的投入之时,没想到今年华为先送出方舟编译器,紧接其后是鸿蒙OS。未来不敢说结局怎样,但现时真切让我和我周围的小伙伴看到了希望。就算激起无论是正面还是负面的全民大讨论,我觉得相比无人问津也算是大大的进步。

言归正传,结合方舟的官网,我其实有几个技术问题想请教。当然,随着方舟进一步扩大和深度开源,这些问题可能也就不言自明。到时候感兴趣的读者不妨以这里提到的问题来看看方舟是如何巧妙解决它们的。

问题一:

https://www.openarkcompiler.cn/document/FAQ Q2说“当前部分Java语言特性和JVM虚拟机特性的支持未包括在本次开源代码中,包括:annotation、lambda表达式、泛型等”。想了解下,这部分功能是否已经在方舟编译器上实现但目前还未开源出来?还是什么别的情况?出于什么考虑,lambda表达式和泛型未能在此时开源?

问题二:

编译器领域现在业界都使用三段式编译器。架构如下:

编译器框架LLVM和核心就是LLVM IR,而方舟编译器也有一个Maple IR。请问相比LLVM IR,Maple IR的优势在哪里?它的愿景是什么?


问题三:

经过方舟编译器处理后的应用,从公开渠道上的信息上看,在流畅度等几个方面有大幅提升。能否详细介绍下流畅度是怎么衡量的?也就是说,方舟内部是如何评价经过方舟编译器处理后以及没有经过方舟编译器处理后的应用的性能?都选了哪些测试点

问题四:

适配了方舟编译器的有几十个APP,但还有很多APP开发者没有机会第一时间接触方舟(包括我自己)。想了解下使用方舟编译器是否有副作用?比如,如果将字节码全部转成了机器码,这会占据较大的存储空间。请问是否有类似这样的问题,有什么好的解决办法吗?

问题五:

方舟编译器说干掉了JVM虚拟机(原话可能不是如此,但我理解是这个意思),请问经过方舟编译器处理的应用是否能按以前的Java程序那样调试?

备注:为什么会问这个问题?java程序debug时必须靠jvm帮忙,比如处理jdwp,更关键是要靠jvm来解释执行字节码。不过,我在ART那本书里并没有详细介绍这个过程,我不保证这个问题问正确了。也请懂行的朋友们指正。

问题六:

方舟编译器对java语言的特性支持如何?比如,ART虚拟机中,一个java方法即使以机器码方式运行,在某些时候也必须回退到解释执行。比如下面的ArrayIndexOutOfBounds异常的处理。

对于类似这种问题,方舟编译器在技术层面上对于它们大概的解决思路是什么?

问题七:

ART虚拟机在诸如synchronized等的实现上做了大量工作(ART一书的第十二章),包括优化(比如一个线程如果已经得到某个锁的情况下,后续再去获取这个锁的话,实际上只是递增了该锁的引用计数)。虽然PTHREAD相关同步处理也有类似的优化,但我想了解下方舟编译器(如果干掉虚拟机的话),有没有针对这方面的处理或者优化?

问题八:

引用计数是垃圾回收的一种经典技术。方舟编译器说是用引用计数代替了其它几种GC技术,做到随用随收。但其中有一些需要特别注意的地方(ART一书的第十三章、十四章专门讲解内存分配和GC)。垃圾回收是和内存分配息息相关的。ART虚拟机内部对内存分配有着良好的管理。比如rosalloc分配器,BumpPointerSpace、针对大内存对象的LargeObjectSpace等。请问方舟编译器是怎么应对的?是将java层的new直接对应到比如native层的new/malloc(直接依赖os的内存分配机制),还是也依赖一个小的,轻量级的runtime来协助这方面的工作?

另外,ART在内存管理方面做了一些优化,比如当程序退到后台后,会对内存进行碎片整理。如果方舟编译器是随用随收的话,请问长时间运行后,是否会存在内存碎片?如果有,是如何处理的呢?

问题九:

官网上提到了伴随方舟编译器有一个轻量级的运行时,这个运行时主要工作是什么?它和ART JVM有何区别?方舟编译器未来还要支持Javascript,这个运行时是否也能支持JS?还是说需要一个针对js的运行时?最后,这个运行时会开源吗?

问题十:

我想方舟编译器的背后是承载了华为甚至很多国人伟大梦想的,但一时领先并不保证长久领先。比如,媒体做了经过方舟编译器处理后APP和苹果手机上APP打开速度的对比测试。方舟编译器的效果比较明显。但ios13据苹果官方数据上看,APP启动速度提升了两倍。这说明我们在努力,对手也在努力。华为是一个有着很强忧患意识的伟大公司。那么,方舟编译器针对ios13是否有优势?我们这个优势会不会很容易被对手颠覆呢?我们该如何努力,朝哪个方向努力呢?

最后

无论怎样,方舟编译器都会在IT历史上留下浓重的笔墨。衷心期望我个人或其它朋友能为我们自己的IT成果——方舟编译器、鸿蒙OS等编写学习资料,贡献自己的微薄力量。

最后的最后

我期望的结果不是朋友们从我的书、文章、博客后学会了什么知识,干成了什么,而应该是说,神农,我可是踩在你的肩膀上的喔。

关于学习方面的问题,我已经讨论完了。后面这个公众号将对一些基础的技术,新技术做一些学习和分享。也欢迎你的投稿。不过,正如我在公众号“联系方式”里说的那样——郑渊洁在童话大王《智齿》里有一句话令我印象深刻,大意是“我有权保持沉默,但你说的每一句话都可能成为我灵感的源泉”。所以,影响不是单向的,很可能我从你那学到的东西更多。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    2985

    浏览量

    41716
  • 编译器
    +关注

    关注

    1

    文章

    1575

    浏览量

    48606
  • 方舟编译器
    +关注

    关注

    0

    文章

    60

    浏览量

    156

原文标题:邓凡平:技术探讨之请教方舟编译器的十个问题

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    编译器的优化选项

    一个程序首先要保证正确性,在保证正确性的基础上,性能也是一个重要的考量。要编写高性能的程序,第一,必须选择合适的算法和数据结构;第二,应该编写编译器能够有效优化以转换成高效可执行代码的源代码,要做到
    的头像 发表于 11-24 15:37 404次阅读
    <b class='flag-5'>编译器</b>的优化选项

    新版编译器的设计思路和优化方法

    小程序编译器在小程序开发、预览、发布各个阶段都需要使用,因此编译器性能会直接影响到开发者开发效率,也会影响到开发者工具的使用体验。 由于旧版的编译器(基于 webpack4)在构建大型项目时会很慢,内存占用也高,一直被开发者吐槽
    发表于 10-13 11:21 149次阅读
    新版<b class='flag-5'>编译器</b>的设计思路和优化方法

    OpenHarmony 的js引擎用的是方舟编译器

    OpenHarmony 的js引擎用的是方舟编译器吗?方舟编译器不是用来编译吗?
    发表于 10-09 09:32

    Keil修改ARM编译器及配置方法

    Keil MDK自 V5.36 版本之后,默认就不带 Arm Compiler V5版本编译器。如果需要使用 V5 版本编译器,就需要自己下载并安装。
    发表于 09-19 10:41 2162次阅读
    Keil修改ARM<b class='flag-5'>编译器</b>及配置方法

    ARM编译器工具链的动态链接应用说明

    和ARM编译器文档。 本应用笔记介绍了动态链接,描述了可用的不同链接模型,并演示了如何使用ARM编译器构建特定于平台的映像。 本文并不打算对动态链接进行深入的技术探讨
    发表于 08-29 06:48

    ARM编译器优化版本1.0

    ARM编译器armcc可以优化您的代码以实现小代码和高性能。 本教程介绍了编译器执行的主要优化技术,并解释了如何控制编译器优化。 本教程假定您已经安装并许可了ARM DS-5 Deve
    发表于 08-28 07:11

    如何安装ARM编译器Linux版

    本教程介绍如何下载、安装、设置您的环境,以及如何开始使用ARM编译器for Linux。 ARM编译器Linux版软件包包括ARM C/C++编译器、ARM Fortran编译器和AR
    发表于 08-28 06:45

    RealView用于BREW编译器和库的编译工具指南

    只要有可能,编译器就会采用Windows/MS-DOS用户所熟悉的广泛使用的命令行选项。 ARM C编译器按照ISO/IEC 9899:1990(E)的定义编译C语言,包括其技术规范1
    发表于 08-12 07:38

    Arm编译器6.6版armclang参考指南

    Arm®编译器armclang参考指南提供了Arm编译器armclaang的用户信息。armclang是一优化的C和C++编译器,它将标准C和标准C++源代码
    发表于 08-11 07:35

    如何实现VBA编译器崩溃

    本篇文章为VBA脚本隐藏技术的最后一篇,将介绍如何在保证VBA脚本正常执行的情况下,使分析人员无法打开编译器
    发表于 07-15 10:02 450次阅读
    如何实现VBA<b class='flag-5'>编译器</b>崩溃

    编译器的标准生命周期

    编译器的标准生命周期
    发表于 07-05 19:32 0次下载
    <b class='flag-5'>编译器</b>的标准生命周期

    Neuron 现场编译器用户指南

    Neuron 现场编译器用户指南
    发表于 07-04 20:47 0次下载
    Neuron 现场<b class='flag-5'>编译器</b>用户指南

    SDCC-Linux下的51 MCU编译器

    SDCC (小型设备C编译器)是为8位微控制器开发的免费C编译器。尽管兼容多种不同体系结构,但SDCC C编译器更适合8051内核。 SDCC是命令行固件开发工具,含预处理器、编译器
    的头像 发表于 06-16 15:19 3643次阅读

    峰会回顾第6期 | 毕昇编译器与OpenHarmony RISC-V生态的进展

    设计经验,负责探索先进软硬件协同设计技术、工具以及方法。   文章内 容来 源 第一届开放原子开源基金会OpenHarmony技术峰会——开发者工具分论坛   视频回顾   正 文 内 容   由C、C++、Java等高级语言编码的人类可读源代码需要通过
    的头像 发表于 05-05 15:46 1125次阅读
    峰会回顾第6期 | 毕昇<b class='flag-5'>编译器</b>与OpenHarmony RISC-V生态的进展

    R32C/100系列C编译器包V.1.01 C编译器用户手册

    R32C/100系列C编译器包V.1.01 C编译器用户手册
    发表于 04-28 19:54 1次下载
    R32C/100系列C<b class='flag-5'>编译器</b>包V.1.01 C<b class='flag-5'>编译器</b>用户手册