華為方舟編譯器是一款是華為推出的首個(gè)完全自主研發(fā)的編譯器,包含編譯器、工具鏈、運(yùn)行時(shí)等關(guān)鍵部件,支持多語(yǔ)言的編譯工具,實(shí)現(xiàn)Java程序到aarch64匯編指令的編譯過(guò)程,華為方舟編譯器的開(kāi)發(fā)者可基于開(kāi)源代碼+二進(jìn)制,編譯構(gòu)建出編譯器工具鏈,能夠有效解決安卓程序“邊解釋邊執(zhí)行”的低效率問(wèn)題。有需要使用這款華為方舟編譯器的用戶快通過(guò)下面地址來(lái)獲取吧!

華為方舟編譯器使用方法
開(kāi)發(fā)環(huán)境推薦
您需要安裝一個(gè)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
放置到openarkcompiler/tools目錄,打開(kāi)openarkcompiler/build/config/BUILDCONFIG.gn文件,將GN_C_COMPILER、GN_CXX_COMPILER和GN_AR_COMPILER三個(gè)變量配置為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)
將GN和Ninja可執(zhí)行程序放置到openarkcompiler/tools目錄,打開(kāi)openarkcompiler/Makefile文件,將GN和NINJA兩個(gè)變量配置為GN和Ninja可執(zhí)行程序所在路徑。例如:
GN := ${MAPLE_ROOT}/tools/gn/gn
NINJA := ${MAPLE_ROOT}/tools/ninja_1.9.0/ninja
華為方舟編譯器特色
多語(yǔ)言聯(lián)合
將同一應(yīng)用中的不同語(yǔ)言代碼聯(lián)合編譯、聯(lián)合優(yōu)化,消除語(yǔ)言間的性能“鴻溝”,降低開(kāi)發(fā)者的優(yōu)化成本
輕量運(yùn)行時(shí)
通過(guò)編譯器的語(yǔ)言實(shí)現(xiàn)能力和優(yōu)化能力增強(qiáng),應(yīng)用運(yùn)行時(shí)的開(kāi)銷(xiāo)更小
軟硬件協(xié)同
編譯器與芯片實(shí)現(xiàn)軟硬件協(xié)同優(yōu)化,充分發(fā)揮硬件能效,應(yīng)用體驗(yàn)更佳
多平臺(tái)支持
支持面向多樣化的終端設(shè)備平臺(tái)進(jìn)行編譯和運(yùn)行,根據(jù)設(shè)備特征提供便捷的開(kāi)發(fā)與部署策略,提高開(kāi)發(fā)效率


華為方舟編譯器功能
一、設(shè)計(jì)階段裝包的APK就立即是可實(shí)行,而且跨語(yǔ)言表達(dá)服務(wù)平臺(tái)
在方舟編譯器里邊,早已編譯好的APK,會(huì)根據(jù)靜態(tài)數(shù)據(jù)編譯的方法先轉(zhuǎn)化成序列號(hào)再安裝,這實(shí)際上是AOT,不用不便的vm虛擬機(jī),提高運(yùn)行速率和高效率。而且做為開(kāi)發(fā)人員,還能夠依據(jù)不一樣的程序特性,挑選差異的編譯改進(jìn)方案,并不像安卓系統(tǒng)官方網(wǎng)的方法應(yīng)用統(tǒng)一的vm虛擬機(jī)計(jì)劃方案。
二、方舟編譯器邊運(yùn)行變清除,運(yùn)行內(nèi)存清新
如今安卓手機(jī)的一大特點(diǎn)便是運(yùn)行內(nèi)存越來(lái)越大,6GB全是老年手機(jī)的配備了。這除開(kāi)程序大之外也有安卓系統(tǒng)的程序運(yùn)行造成廢棄物多有關(guān)系。那麼清理垃圾呢?則必須中止程序,也便會(huì)頓一下,即說(shuō)白了的“卡”。華為公司方舟編譯器則是運(yùn)用程序多線程運(yùn)行的特性。舉個(gè)例子,您如今已經(jīng)用的“中關(guān)村線上”這一APP用了AB2個(gè)線程,在華為公司的P30手機(jī)上中,那麼線程A運(yùn)行的情況下,B在清理垃圾,隨后A線程清理垃圾的過(guò)程中B線程在運(yùn)行,程序運(yùn)行不終斷,生活垃圾處理不斷,保證了又連貫性、又節(jié)省服務(wù)器資源。
三、方舟編譯器,運(yùn)用級(jí)編譯提升
代碼設(shè)計(jì)是編譯器更為關(guān)鍵的作用,也是評(píng)定一個(gè)編譯器好壞最重要的規(guī)范。
當(dāng)今因?yàn)榘沧寇浖?yīng)用了vm虛擬機(jī)體制,無(wú)法朝向不一樣運(yùn)用對(duì)vm虛擬機(jī)開(kāi)展目的性的靈便提升。
安卓ART的AoT和JIT動(dòng)態(tài)編譯由于是運(yùn)行在手機(jī)上,受資源限制,因此只有應(yīng)用簡(jiǎn)易的蟻群算法。
而方舟編譯器因?yàn)槭窃谶\(yùn)用設(shè)計(jì)階段開(kāi)展編譯,因此可以可以不一樣運(yùn)用靈便選用不一樣的編譯改進(jìn)方案,并且由于在開(kāi)發(fā)工具編譯不容易遭受手機(jī)性能的限定,可以應(yīng)用大量?jī)?yōu)秀的蟻群算法,進(jìn)而促使每一個(gè)運(yùn)用的特性達(dá)到最好。
方舟編譯器還能夠理解程序特征、使用適合的指令來(lái)執(zhí)行程序,因此能夠極大程度地發(fā)揮出芯片的能力。
方舟編譯器聚焦在 Java 代碼性能上,未來(lái),方舟編譯器將覆蓋多種編程語(yǔ)言(包括 C/C++、JS 等),多種芯片架構(gòu)(包括CPU、GPU、IPU等),覆蓋更廣的業(yè)務(wù)場(chǎng)景。
方舟編譯器改變了系統(tǒng)及應(yīng)用的編譯和運(yùn)行機(jī)制,直接將高級(jí)語(yǔ)言編譯成機(jī)器碼,讓手機(jī)能直接聽(tīng)懂“高級(jí)語(yǔ)言”,消除了虛擬機(jī)動(dòng)態(tài)編譯的額外開(kāi)銷(xiāo),提升了手機(jī)運(yùn)行效率。