标签: 华为方舟编译器
华为方舟编译器是一款支持多语言的编译工具,由华为公司开发,实现Java程序到aarch64汇编指令的编译过程,华为方舟编译器的开发者可基于开源代码+二进制,编译构建出编译器工具链,尝试对Java程序进行编译。
基本简介方舟编译器概述
方舟编译器是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包含编译器、工具链、运行时等关键部件。 方舟编译器还在持续演进中,陆续将上述能力实现和开源。
本次方舟编译器开源的是编译器框架部分源码,包括编译器中间表示(IR)和语言编译实现,同时搭配编译器其他二进制组件,实现Java程序到aarch64汇编指令的编译过程。开发者可基于开源代码+二进制,编译构建出编译器工具链,尝试对Java程序进行编译。社区参与者可以通过框架源码学习方舟编译器的编译器中间表达(IR)及基本的中端编译框架,熟悉方舟编译器的架构思想,并参与诸如对编译器中端优化的贡献。
华为始终以开放的姿态拥抱开源,充分参与源码共享,与开发者们共同成就开源世界的科技进步。在全球主流基金会及开源社区中,华为拥有十多个核心席位,作为Linux基金会白金会员,华为不断贡献自己的技术力量,对Linux kernel累积贡献6800+补丁。同时,华为已与40多家头部应用厂商合作,对各类流行应用进行编译优化,并在未来不久上线。
此次公布方舟编译器框架源码后,华为预计将于2020年及以后实现方舟编译器工具链完整开源。在官方开源社区中,开发者们可以参与并贡献自己的力量,与华为一起共同推进基础软件的发展。
华为坚持每年将10%以上的销售收入投入研究与开发,随着软件实力持续增强, 诞生了“GPU Turbo”“Link Turbo”“EROFS”等硬核技术。未来,华为将与广大开发者以及合作伙伴进行更深入、广泛的合作,坚持开放、合作、共赢的策略,联接全行业的能力持续推进产业创新与开放生态。
软件特色多语言联合
将同一应用中的不同语言代码联合编译、联合优化,消除语言间的性能“鸿沟”,降低开发者的优化成本
轻量运行时
通过编译器的语言实现能力和优化能力增强,应用运行时的开销更小
软硬件协同
编译器与芯片实现软硬件协同优化,充分发挥硬件能效,应用体验更佳
多平台支持
支持面向多样化的终端设备平台进行编译和运行,根据设备特征提供便捷的开发与部署策略,提高开发效率
功能介绍一、开发阶段打包的APK就直接是可执行,并且跨语言平台
在方舟编译器里面,已经编译好的APK,会通过静态编译的方式先转换成机器码再安装,这其实是AOT,无需麻烦的虚拟机,提升运行速度和效率。并且作为开发者,还可以根据不同的程序特点,选择不同的编译优化方案,不像安卓官方的方式使用统一的虚拟机方案。
二、方舟编译器边运行变清理,内存清爽
现在安卓手机的一大特色就是内存越来越大,6GB都是老人机的配置了。这除了程序大以外还有安卓的程序运行产生垃圾多有关系。那么清理垃圾呢?则需要暂停程序,也就会顿一下,即所谓的“卡”。华为方舟编译器则是利用程序多线程运行的特点。打个比方,您现在正在用的“中关村在线”这个APP用了AB两个线程,在华为的P30手机中,那么线程A运行的时候,B在清理垃圾,然后A线程清理垃圾的时候B线程在运行,程序运行不中断,垃圾处理不停,做到了又连贯、又节约系统资源。
三、方舟编译器,应用级编译优化
代码优化是编译器最为核心的功能,也是评判一个编译器优劣最重要的标准。
当前由于安卓应用使用了虚拟机机制,难以面向不同应用对虚拟机进行针对性的灵活优化。
安卓ART的AoT和JIT动态编译因为是运行在手机上,受资源所限,因而只能使用简单的优化算法。
而方舟编译器由于是在应用开发阶段进行编译,所以可以允许不同应用灵活采用不同的编译优化方案,而且因为在开发环境编译不会受到手机性能的限制,可以使用更多先进的优化算法,从而使得每个应用的性能达到最佳。
使用方法开发环境推荐
您需要安装一个64位版本的Ubuntu(推荐Ubuntu 16.04)
sudo apt-get -y install openjdk-8-jdk git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip lib32z1-dev qemu g++-multilib gcc-multilib python3-paramiko python-paramiko python-jenkins python-requests python-xlwt libglib2.0-dev libpixman-1-dev linux-libc-dev:i386
sudo apt-get -y install gcc-5-aarch64-linux-gnu g++-5-aarch64-linux-gnu
安装Clang编译器并完成配置(用于编译方舟编译器代码)
下载clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04
LLVM下载地址: http://releases.llvm.org/download.html#8.0.0
放置到openarkcompiler/tools目录,打开openarkcompiler/build/config/BUILDCONFIG.gn文件,将GN_C_COMPILER、GN_CXX_COMPILER和GN_AR_COMPILER三个变量配置为Clang编译器所在路径,例如:
GN_C_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang"
GN_CXX_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang++"
GN_AR_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/llvm-ar"
其中${MAPLE_ROOT}为openarkcompiler源码根目录。
安装Ninja、GN并完成配置
下载Ninja(v1.9.0)及GN(Linux Version)
Ninja下载地址: https://github.com/ninja-build/ninja/releases
GN下载地址:https://archive.softwareheritage.org/browse/content/sha1_git:2dc0d5b26caef44f467de8120b26f8aad8b878be/raw/?filename=gn
将GN和Ninja可执行程序放置到openarkcompiler/tools目录,打开openarkcompiler/Makefile文件,将GN和NINJA两个变量配置为GN和Ninja可执行程序所在路径。例如:
GN := ${MAPLE_ROOT}/tools/gn/gn
NINJA := ${MAPLE_ROOT}/tools/ninja_1.9.0/ninja
常见问题Q1:方舟编译器是一次性全部代码吗?
答:
首次开源范围是编译器 IR( Intermediate Representation)、RC(Reference Counting)和多语言设计思想等,用于与业界、学术界沟通交流。接下来将陆续开源编译器前端、后端,支持其它语言(如 JavaScript)的编译等,当前部分Java语言特性和JVM虚拟机特性的支持未包括在本次开源代码中,包括:annotation、lambda表达式、泛型等。目前仍有很多地方不完善,会在社区陆续迭代,遇到问题请在社区提交 issue,欢迎在社区继续讨论设计和代码共建。。
Q2:通过哪些渠道可以获取方舟编译器的框架源码?
答:
孵化期间,开发者可以通过如下代码托管网址获得相关代码和文档,供参考学习、了解方舟编译器的架构和代码。
华为云托管地址:https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler。
开源中国码云托管地址:https://gitee.com/harmonyos/OpenArkCompiler
Q3:方舟编译器开源路标是怎样的?
答:
方舟编译器从 2019 年 8 月开始开源,欢迎广大的应用开发者、手机厂商、软件从业人员一起共建开源社区和生态。 开源计划大体上这样安排:2019 年 8 月重点开源框架部分,接下来将陆续开源编译器前端、后端;支持 Java 程序编译、JavaScript 语言应用的编译等。
Q4:方舟编译器开源使用的是什么License?
答:
方舟编译器采用木兰 License。 木兰 License 由业界众多专家和公司集体共建,并非华为主导。木兰 License 具体的好处,详见专业点评:
开源中国:https://www.oschina.net/news/108840/mulanpsl-the-1st-opensource-license-of-china
开源社:https://mp.weixin.qq.com/s/1xqxxiNKhcgw4RRspAaW2A
InfoQ:https://www.infoq.cn/article/KrZAbAcJrxCU27vKj*JE
Q5: 如何确认下载包来源可靠?md5校验码是多少?
答:
OpenArkCompiler-0.2-ubuntu-16.04-x86_64.tar.gz 包的 MD5码是: e7dc8b8c242f2d26429e2ad71dae3112
OpenArkCompiler-0.2.tar.gz 包的MD5码是:1bf859a67c8b9a2d4080bdaf25ef6181
加载全部内容
Ghidra-Ghidra(反汇编工具)下载 v9.0.4中文版281.6M962人在玩Ghidra反汇编工具是由美国安全局推出的专门用于分析软件和病毒的反汇编工具,通过Ghidra能够对各类代码进行分析,从而判断其漏洞和恶意程序,有需要的可以下载使用。
下载Clash for Windows中文版-Clash for Windows(编程辅助代理工具)下载 v0.17.1中文版191.8M201人在玩ClashforWindows是一款编程辅助代理工具,该软件已经汉化,软件也是绿色的,用户直接打开就能用,软件帮助各种编程平台进行代理管理,更好的帮助用户管理各平台。
下载UltraEdit破解版下载-UltraEdit下载 v27.10.0.1392.3M153人在玩UltraEdit是一套功能超级强大的文本编辑器,能够满足你一切编辑需要,UltraEdit可以编辑文本、十六进制、ASCII码,可以取代记事本内建英文单字检查、C++及VB指令突显,可同时编辑多个文件。
下载makecode离线版-makecode(离线编程软件)下载 v3.6.3官方版232.4M83人在玩makecode离线版是一款为了方便没有网络或是网络较差的学校进行Microbit教学的软件,不受网络限制,随时都可以使用,界面和官方界面是一模一样的,使用上也是一模一样的,是一款非常好用的软件。。
下载ilspy下载-ilspy反编译工具下载 v7.0.0.6488官方中文版3.3M82人在玩ilspy反编译工具是一款强大的反编译工具适用于.net平台使用ilspy反编译工具可以轻松的反编译C#及VB程序马上下载这款中文版的ILSpy反编译工具吧。
下载aetool编程器破解版-AE Tool下载 v5.5官方版11.2M67人在玩AETool是一款安卓EMMC编程工具,通常用于给手机和各类平板电脑的EMMC进行读写和编程工作,是一款非常专业的维修和root软件,有需要的可以下载使用。
下载鱼跃CMS-鱼跃CMS下载 v2.2.15官方版4.1M63人在玩鱼跃CMS是鲶鱼CMS开发的一款面向企业的内容管理系统,是目前最轻量的内容管理系统,鱼跃CMS包含了企业建站所需的不同功能模块,例如新闻中心、产品中心、单页面、网站基本组件块、企业信息等,可以帮助您方便地实现各类展示效果的企业网站。
下载大漠插件破解版-大漠综合工具下载 v7.2119免费版8.7M54人在玩大漠综合工具是一款识图找字模拟插件,能够帮助用户轻松识别图片中的文字,大漠综合工具集前后台,文字识别,图色,键鼠,窗口,内存,DX,Call等功能于一身。
下载DBF Viewer 2000(数据库浏览工具)下载 v5.95中文版3.5M49人在玩DBFViewer2000数据库浏览工具是一款标准的xBase数据库浏览工具,而且还是一个xBase编辑器。DBFViewer2000支持Clipper、FoxPro、VFP、DB2KDBF等多种文件格式;还拥有自动关联.DBF文件和快速浏览的功能。。
下载appium for windows下载-Appium(自动化测试工具)下载 v1.15.1官方版142.9M47人在玩AppiumForWindows是一款开源的、多平台的自动化测试工具,原来主要是一个移动端的自动化框架,可用于测试原生应用,现在在windows、mac上也有GUI程序,提供给大家的是windows版本,有需要的赶快下载吧。
下载