方舟编译器下载-华为方舟编译器下载 v0.2官方版

方舟编译器是华为公司开发的一款全新的安卓应用编译器,是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包含编译器、工具链、运行时等关键部件,可以显著提高手机的运行速度,经测试,能够将系统操作流畅度提升24%、系统响应力提升44%、第三方应用操作流畅度提升60%。全新的方舟编译器首次在Java领域将虚拟机干掉了,也是软件史上首次将Java/C/C++等混合代码一次编译成机器码直接在手机上运行,彻底告别Java的JNI额外开销,也彻底告别了虚拟机GC内存回收带来的应用进程掉线,使操作流畅度大幅提升。另一方面,方舟编译器用空间换性能,直接将编译器的代码优化搬到了开发者环境,不再被手机端的硬件资源所限制,为代码优化提供了无限可能。
目前华为方舟编译器已经首次开放了框架源码,包括编译器中间表示(IR)和语言编译实现,同时搭配编译器其他二进制组件,实现Java程序到aarch64汇编指令的编译过程。开发者可基于开源代码+二进制,编译构建出编译器工具链,尝试对Java程序进行编译。方舟编译器对终端软件编译机制进行了架构级优化,将显著地提升用户体验,欢迎免费下载体验。
华为方舟编译器

方舟编译器优势:

1、多语言联合:
将同一应用中的不同语言代码联合编译、联合优化,消除语言间的性能“鸿沟”,降低开发者的优化成本。
2、轻量运行时:
通过编译器的语言实现能力和优化能力增强,应用运行时的开销更小。
3、软硬件协同:
编译器与芯片实现软硬件协同优化,充分发挥硬件能效,应用体验更佳。
4、多平台支持:
支持面向多样化的终端设备平台进行编译和运行,根据设备特征提供便捷的开发与部署策略,提高开发效率。

方舟编译器架构示意图:

当前方舟编译器支持Java/Kotlin程序字节码的前端输入,其它编程语言的支持(如 C/C++/JS 等)还在规划中,方舟编译器的中间表示(IR)转换器将前端输入转换成方舟IR,并输送给后端的优化器,最终生成二进制文件,二进制文件与编译器运行时库文件链接生成可执行文件,在方舟的运行环境中就可执行该文件。
方舟编译器IR是支持程序编译和运行的中间程序表示。程序源代码中的任何信息对于程序分析和优化都是有帮助的,所以方舟IR的目标是尽可能完整详细地提供源程序的信息。

方舟编译器环境配置:

一、硬件推荐配置
2 GHz 双核处理器或者更高等级CPU
2 GB 系统内存及以上
200GB 可用磁盘空间
二、开发环境推荐
您需要安装一个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三个变量配置为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 = "${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

方舟编译器开发历程:

没错,华为为此准备了十年。
2009年,华为启动5G基础技术研究的同时,开始创建编译组,第一批海内外研究人员加入。
2013年,华为推出面向基站领域的自研编译器HCC,并正式提出编译器框架构想。
2014年,众多海内外专家加入华为,方舟项目正式启动。
2016年,成立编译器与编程语言实验室。
2019年,华为方舟编译器正式面世!

这十年,每一次攻关都蕴含着华为软件工程师们的倾力投入,每一个进展都值得铭记。
2017年5月,方舟编译器上第一个Java程序“Hello World”跑通。
2017年8月的一个凌晨,在华为的一个实验室里,项目组已经连续数日24小时不间断攻关,却始终看不到success的返回信息。绝望之下,工程师把所有通信数据打印出来,逐个字节排查,最终发现有一处字节的顺序不一致。纠正后,华为方舟跑通了第一个安卓后台服务DiskStatus,这标志着对安卓的换心手术进入了实操阶段。
2018年春节前一周,方舟编译器跑通安卓系统所有后台服务,并成功移植到手机。当晚,所有人聚集在实验室的机房中,等待首个开机画面加载成功的神圣时刻。秒针滴答,如同过了一个世纪那么久,屏幕终于点亮。
欢呼,拥抱,一蹦三尺高,项目组成员们到底没忍住,留下了激动的泪水。
接下来,项目组在除夕前夜启动了方舟编译手机的Beta测试。大年初一清晨,总架构师发来了第一条经编译器编译的运行程序发出来的拜年消息:
春节快乐,方舟大吉!
当P30发布会上“方舟”甫一出现,就在中国软件行业“炸”了锅。无数软件从业者从一开始的质疑,到弄清方舟真相后的惊叹……这些都是对华为软件工程师们十年如一日、一点一滴“啃硬骨头”的致敬!
实际上,方舟已经不是传统意义上从高级语言到机器码的“万能翻译”,更是一个编译运行系统。
一方面,方舟编译器首次在Java领域将虚拟机干掉了,也是软件史上首次将Java/C/C++等混合代码一次编译成机器码直接在手机上运行,彻底告别Java的JNI额外开销,也彻底告别了虚拟机GC内存回收带来的应用进程掉线,使操作流畅度大幅提升。如果说目前最新的安卓系统是和谐号动车,那么经方舟编译的安卓系统便是高铁,是“复兴号”。
华为手机直接通过方舟编译器替换了Android system-server的所有后台服务,这一项就已经足够让华为EMUI比其他安卓系统更快一步。根据华为官方测试,方舟编译器提升手机系统操作流畅度高达24%,系统响应性能提升44%。入手P30系列的用户,应该已经体验到了。

另一方面,方舟编译器用空间换性能,直接将编译器的代码优化搬到了开发者环境,不再被手机端的硬件资源所限制,为代码优化提供了无限可能。
此外,经测试,新浪微博极速版APP经方舟编译后,操作流畅度提升高达60%。
解决安卓的四大命门,出于安卓,胜于安卓,超越iOS,并且全面兼容安卓,这就是华为方舟编译器的使命。

软件功能:

一、代码“万国通”
95%的Top应用都是Java/C/C++等混合语言编写而成。方舟编译器的第二个使命,就是干掉混合语言互相调用带来的JNI开销。
华为方舟编译器团队基于多个编程语言的深刻理解和大量研发积累,将混合语言破天荒实现了统一的中间表示IR,这就相当于同一个人能够理解全世界的语言,所以我们把这个革命性突破叫做,代码“万国通”。
那么方舟编译器是如何使用统一的IR来表示各种语言呢?
IR是用来表示代码的数据结构,它是编译器的各模块以及相关工具之间用来传递信息的“协议和通用语言”,也是程序变换和编译优化各种算法的承载体。它是编译器的“大脑”,直接决定了编译器的最终效果。它的难度是最高的。
华为方舟编译器团队对IR进行了长达五年的精雕细琢,逐渐摸索出“大脑”里每一条神经、每一个神经元的信号规律,并在此基础上发明了一套核心专利,使得不同语言代码在开发者环境中能够统一编译成同一套可直接执行的机器码,从而彻底消除混合语言互相调用的开销。

二、给代码装上飞机发动机
除了IR,编译器还有一个非常重要的价值,就是代码优化。
华为方舟编译器,直接将代码优化从手机环节搬到了开发者环境,未来还可能搬到云端。利用开发者环境更强大的算力,可以实现更先进和精细的优化算法,来达到更强大的优化效果,在很多特定场景代码优化的提升甚至是颠覆性的。

这相当于给APP在方舟里装上飞机发动机,让你的APP运行如飞!
值得一提的是,开发者使用方舟编译器,并不需要改变原来的编码习惯。开发者可以自行开发代码优化算法,也可以仅通过方舟编译器预置的算法进行代码优化。未来,华为还将提供代码调优工具,开发者可以选择根据工具的优化建议来调整代码,和方舟编译器配合获得更优的执行效果。
可以想象,未来广大APP开发者使用方舟编译器后,消费者们的体验将达到一个前所未有的高度。这对于整个安卓生态,都是一件前所未有的幸事!
三、Stop World,安卓卡顿再见
方舟的第四个使命,就是解决安卓虚拟机GC内存回收带来的“Stop World”。
目前安卓手机内存资源不够用的时候,GC直接叫停所有应用,所以偶尔会遭遇莫名卡顿。
方舟编译器采用了引用计数法(RC,Reference Counting)来进行内存的实时回收,并且配合使用了专门的消除环算法(消除对象互相引用带来的无法回收问题),来避免GC集中式回收带来的系统卡顿。相比GC,方舟的内存回收是实时的而非集中式的,且不需要暂停应用进程,这样便大大消除了卡顿。

如果把内存回收比作成打扫房间,那么GC的策略是专门有一个卫生员,看房间里垃圾太多了,就把所有人请出去,打扫完了再让大家回来。而方舟的RC则是每个人收拾自己的垃圾,用完就清理,保持清洁的同时不影响人的正常活动。
另外一方面,方舟编译器在运行状态下引入了高效的环回收机制,允许有选择的智能回收某个APP的内存占用,这对传统的环回收算法是一个非常棒的改进。
正是因为方舟做到混合语言的统一中间表示和完全静态编译,它干掉了虚拟机,消除了JNI开销,告别了GC内存回收的“间歇性”卡顿,以及其他很多开销。同时,为开发者进行代码优化提供了一个更广阔的舞台。
华为很快将全面开源方舟编译器,届时开发者们可以使用方舟编译器作为开发工具,为移动应用生态和体验打开一扇全新的大门。

华为方舟编译器安装教程:

一、安装前准备
1) 环境要求
方舟编译器支持如下64位操作系统。
SUSE12sp4及以上版本。
ubuntu16.04及以上版本。
其他glibc版本在2.22及以上的Linux发行版。
2) 获取软件包
安装方舟编译器需要获取如下的开源软件包。
1、GCC 7.3.0 编译器源码包
https://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz
2、Binutils 2.31.1 汇编器、链接器等二进制工具集源码包
https://ftp.gnu.org/gnu/binutils/binutils-2.31.1.tar.gz
3、Glibc 2.29 GNU libc库源码包
https://git.linaro.org/toolchain/glibc.git/snapshot/glibc-2.29.tar.gz
4、Mpc 1.1.0 复数运算库
https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz
5、GNU MPFR 4.0.2 多精度浮点计算库
https://www.mpfr.org/mpfr-current/mpfr-4.0.2.tar.gz
6、isl 0.21 集和线性约束范围内整数点关系的操作库
http://isl.gforge.inria.fr/isl-0.21.tar.gz
二、安装HCC编译器
1) 操作步骤
您可以使用HCC tar包将HCC安装到当前用户权限下的任何位置,而不会影响其他编译器的使用。
a) 介绍操作入口,例如用XX帐号登录XX环境。
b) 登陆HCC下载地址下载压缩包
hcc_arm64le.tar.gz
c) 将tar包拷贝至您想要安装的目录。
命令脚本如下所示。
cp hcc_arm64le.tar.gz /path/to/your/dir
d) 解压缩软件包。
命令脚本如下所示。
tar zxvf hcc_arm64le.tar.gz
e) 设置环境变量。
设置环境变量命令脚本如下所示。
export PATH=/path/to/your/dir/hcc_arm64le/bin:$PATH
HCC编译器提供的编译工具在=/path/to/your/dir/hcc_arm64le/bin目录下。
2) 安装后检查
HCC编译器安装完成后,可以执行aarch64-linux-gnu-gcc -v命令查询HCC版本。

常见问题:

1、方舟编译器是一次性全部代码吗?
首次开源范围是编译器 IR( Intermediate Representation)、RC(Reference Counting)和多语言设计思想等,用于与业界、学术界沟通交流。后续将陆续开源编译器前端、后端,支持其它语言(如 JavaScript)的编译等,当前部分Java语言特性和JVM虚拟机特性的支持未包括在本次开源代码中,包括:annotation、lambda表达式、泛型等。目前仍有很多地方不完善,会在社区陆续迭代,遇到问题请在社区提交 issue,欢迎在社区继续讨论设计和代码共建。
2、方舟编译器开源路标是怎样的?
方舟编译器从 2019 年 8 月开始开源,欢迎广大的应用开发者、手机厂商、软件从业人员一起共建开源社区和生态。 开源计划大体上这样安排:2019 年 8 月重点开源框架部分;后续将陆续开源编译器前端、后端;支持 Java 程序编译、JavaScript 语言应用的编译等。
3、方舟编译开源面向全球开发者吗?英文网站何时上线?
方舟编译器是向全球开发者进行开源,因此,官方网站和代码托管平台均面向全球开发者开放。目前英文版网站正在紧张的开发及内测,计划将于 2019 年 Q4 上线。
4、方舟编译器源码托管计划是怎么的?
孵化委员会期间,方舟编译器代码是托管在华为云上面。在未来走向开放治理以后,将由所挂靠机构选择的平台进行托管。如果挂靠的机构采取了 X 平台,我们就采用这个机构的代码托管模式进行托管。
当前代码托管的地址:https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler
5、方舟编译器开源使用的是什么License?
方舟编译器采用木兰 License。 木兰 License 由业界众多专家和公司集体共建,并非华为主导。
6、如何确认下载包来源可靠?MD5校验码是多少?
OpenArkCompiler-0.2-ubuntu-16.04-x86_64.tar.gz 包的 MD5码是: e7dc8b8c242f2d26429e2ad71dae3112
OpenArkCompiler-0.2.tar.gz 包的MD5码是:
1bf859a67c8b9a2d4080bdaf25ef6181

下载地址:

华为方舟编译器
网盘下载地址:
百度网盘下载 城通网盘下载 皮皮盘下载