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

    文章

    3253

    浏览量

    42408
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49052
  • 方舟编译器
    +关注

    关注

    0

    文章

    60

    浏览量

    186

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

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

收藏 人收藏

    评论

    相关推荐

    MSP430优化C/C++编译器v21.6.0.LTS

    电子发烧友网站提供《MSP430优化C/C++编译器v21.6.0.LTS.pdf》资料免费下载
    发表于 11-08 14:57 0次下载
    MSP430优化C/C++<b class='flag-5'>编译器</b>v21.6.0.LTS

    TMS320C6000优化C/C++编译器v8.3.x

    电子发烧友网站提供《TMS320C6000优化C/C++编译器v8.3.x.pdf》资料免费下载
    发表于 11-01 09:35 0次下载
    TMS320C6000优化C/C++<b class='flag-5'>编译器</b>v8.3.x

    C7000优化C/C++编译器

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    C7000优化C/C++<b class='flag-5'>编译器</b>

    Keil编译器优化方法

    我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
    的头像 发表于 10-23 16:35 335次阅读
    Keil<b class='flag-5'>编译器</b>优化方法

    AI编译器技术剖析

    随着人工智能技术的飞速发展,AI编译器作为一种新兴的编译技术逐渐进入人们的视野。AI编译器不仅具备传统
    的头像 发表于 07-17 18:28 1484次阅读

    人工智能编译器与传统编译器的区别

    人工智能编译器(AI编译器)与传统编译器在多个方面存在显著的差异。这些差异主要体现在设计目标、功能特性、优化策略、适用范围以及技术复杂性等方面。以下是对两者区别的详细
    的头像 发表于 07-17 18:19 1701次阅读

    深度学习编译器和推理引擎的区别

    深度学习编译器和推理引擎在人工智能领域中都扮演着至关重要的角色,但它们各自的功能、应用场景以及优化目标等方面存在显著的差异。以下是对两者区别的详细探讨
    的头像 发表于 07-17 18:12 1189次阅读

    Meta发布基于Code Llama的LLM编译器

    近日,科技巨头Meta在其X平台上正式宣布推出了一款革命性的LLM编译器,这一模型家族基于Meta Code Llama构建,并融合了先进的代码优化和编译器功能。LLM编译器的推出,标志着Meta在人工智能领域的又一重大突破,将
    的头像 发表于 06-29 17:54 1459次阅读

    SEGGER编译器优化和安全技术介绍 支持最新C和C++语言

    SEGGER编译器是专门为ARM和RISC-V微控制设计的优化C/C++编译器。它建立在强大的Clang前端上,支持最新的C和C++语言功能。 除其他外,其主要功能包括: 1) 尺寸优化:通过调整
    的头像 发表于 06-04 15:31 1405次阅读
    SEGGER<b class='flag-5'>编译器</b>优化和安全<b class='flag-5'>技术</b>介绍 支持最新C和C++语言

    具有十个解码输出的进位计数/除法器数据表

    电子发烧友网站提供《具有十个解码输出的进位计数/除法器数据表.pdf》资料免费下载
    发表于 05-17 10:47 0次下载
    具有<b class='flag-5'>十个</b>解码输出的<b class='flag-5'>十</b>进位计数<b class='flag-5'>器</b>/除法器数据表

    C语言:嵌入式开发中的关键编译器角色

    嵌入式程序开发跟硬件密切相关,需要使用C语言来读写底层寄存、存取数据、控制硬件等,C语言和硬件之间由编译器来联系,一些C标准不支持的硬件特性操作,由编译器提供。
    发表于 04-26 14:53 561次阅读
    C语言:嵌入式开发中的关键<b class='flag-5'>编译器</b>角色

    QT开发学习笔记1(安装交叉编译器

    QT安装交叉编译器
    的头像 发表于 02-18 10:02 864次阅读
    QT开发学习笔记1(安装交叉<b class='flag-5'>编译器</b>)

    RL78系列的C编译器包数据手册

    电子发烧友网站提供《RL78系列的C编译器包数据手册.pdf》资料免费下载
    发表于 01-26 15:55 1次下载
    RL78系列的C<b class='flag-5'>编译器</b>包数据手册

    Triton编译器的原理和性能

    Triton是一种用于编写高效自定义深度学习原语的语言和编译器。Triton的目的是提供一开源环境,以比CUDA更高的生产力编写快速代码,但也比其他现有DSL具有更大的灵活性。Triton已被采用
    的头像 发表于 12-16 11:22 2745次阅读
    Triton<b class='flag-5'>编译器</b>的原理和性能

    TVM编译器的整体架构和基本方法

    有将近两个月没有学习一些新东西,更新一下博客了。一直在忙公司的一项目,是做一款支持LSTM和RNN的通用架构加速IP。自己恰好负责指令编译工作,虽然开始的指令比较粗糙,没有一套完整的编译器架构
    的头像 发表于 11-30 09:36 2303次阅读
    TVM<b class='flag-5'>编译器</b>的整体架构和基本方法