当前位置: 首页 > 科技观察

华为方舟编译器深度解读:第三方应用45款

时间:2023-03-16 17:42:04 科技观察

8月31日,华为方舟编译器(OpenArkCompiler)正式开源。其他信息也一应俱全。方舟编译器开源了编译器框架的部分源代码,包括编译器中间表示(IR)和语言编译实现,以及编译器的其他二进制组件,实现从Java程序到aarch64汇编指令的编译过程。开发者可以基于开源代码+二进制编译构建编译器工具链,尝试编译Java程序。社区参与者可以通过框架源码学习编译器中间表达式(IR)和方舟编译器的基本中端编译框架,熟悉方舟编译器的架构,参与中端编译器等贡献。结束编译器的优化。【方舟编译器的优势】据华为介绍,方舟编译器是一个统一的编程平台,旨在支持多种编程语言和多种芯片平台的联合编译运行,包括编译器、工具链和运行时。组件还在不断演进,以上能力会陆续实现和开源。通过多语言统一IR表示,方舟编译器可以在应用中实现多种编程语言的联合编译和优化以提升性能,并在支持多平台的同时,根据设备提供便捷的开发部署策略,提升效率特征。华为方舟编译器为系统和应用提供了全新的编译运行机制。从动态编译到静态编译,直接将高级语言编译成机器码,彻底省去虚拟机动态编译的额外开销,实现开发。与运行效率相适应。1、多语言联合编译,同一应用中不同语言代码的联合优化,消除语言间的性能“差距”,降低开发者的优化成本。增强,应用运行时开销更小3.软硬件协同编译器和芯片实现软硬件协同优化,充分发挥硬件能效,更好的应用体验4.多平台支持支持编译运行终端设备平台多样化,根据设备特性提供便捷的开发部署策略,提高开发效率【方舟编译器架构设计】目前方舟编译器支持Java/Kotlin程序字节码前端输入,支持其他编程语言比如C/C++/JS还在规划中。方舟编译器的中间表示(IR)转换器将前端输入转换为方舟IR,并发送给后端优化器,最终生成一个二进制文件,与编译器的运行时库文件链接起来生成可执行文件。该文件可以在运行环境中执行。ArkCompilerIR是一种支持程序编译和执行的中间程序表示。程序源码中的任何信息都有助于程序分析和优化,所以方舟的目标是提供尽可能完整和详细的源程序信息。【方舟编译器环境配置】-硬件配置推荐方舟编译器的硬件配置要求不高。方舟编译器硬件配置最低要求为2GHz双核处理器、2GB内存、200GB硬盘空间。当然,要获得最高的效率,还是强烈推荐更高配置的。-开发环境推荐64位Linux版本,尤其是Ubuntu16.04sudoapt-get-yinstallopenjdk-8-jdkgit-coregnupgflexbisongperfbuild-essentialzipcurlzlib1g-devlibc6-dev-i386lib32ncurses5-devx11proto-core-devlibx11-devlib32z-devccachelibgl1-mesa-devlibxml2-utilsxsltprocunziplib32z1-devqemug++-multilibgcc-multilibpython3-paramikopython-paramikopython-jenkinspython-requestspython-xlwtlibglib2.0-devlibpixman-1-devlinux-libc-dev:i386sudoapt-get-yinstallgcc-5-aarch64-linux-gnug++-5-aarch64-linux-gnu-Clang编译器主要用于编译方舟编译代码。下载clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04,地址: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、GN下载Ninja(v1.9.0)和GN(Linux版)Ninja,地址:https://github.com/ninja-build/ninja/releasesGN下载地址: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/gnNINJA:=${MAPLE_ROOT}/tools/ninja_1.9.0/ninja【方舟编译器FAQ】Q1:方舟编译器开源有官网吗?A1:孵化期间,官网为https://www.openarkcompiler.cn。毕业后官网待定。Q2:方舟编译器是一次性编译所有代码吗?A2:首次开源的范围是编译器IR(IntermediateRepresentation)、RC(ReferenceCounting)和多语言设计思想等,用于与业界和学术界的交流。未来编译器的前后端会陆续开源,支持其他语言(比如JavaScript)的编译。对一些Java语言特性和JVM虚拟机特性的支持不包含在这个开源代码中,包括注解、lambda表达式和泛型。目前还有很多不完善的地方,以后会陆续在社区迭代。如果遇到问题,请在社区提交问题。Q3:方舟编译器的框架源码可以通过哪些渠道获取?A3:在孵化期间,开发者可以通过以下代码托管网站获取相关代码和文档,以供参考学习和了解方舟编译器的架构和代码。华为云托管地址:https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler开源中国码云托管地址:https://gitee.com/harmonyos/OpenArkCompilerQ4:方舟编译器的开源路线图是怎样的?A4:方舟编译器于2019年8月开源,欢迎App开发者、手机厂商、软件从业者共同建设开源社区和生态。开源计划大体安排如下:重点开源框架将于2019年8月发布;编译器前后端将陆续开源;将支持Java程序编译、JavaScript语言应用程序编译等。Q5:还有哪些途径可以获得方舟编译器的相关信息?A5:方舟编译器有官方微信公众号公众号:方舟编译器开源Q6:方舟编译器是否开源给全球开发者?英文网站什么时候上线?A6:方舟编译器是开源给全球开发者的。因此,官网和代码托管平台面向全球开发者开放。目前网站英文版正在紧张开发和内测中,计划2019年Q4上线。Q7:方舟编译器的源码托管计划是怎样的?A7:孵化期间,方舟编译器代码托管在华为云上。未来走向开放治理后,由所属机构选择的平台托管。所属机构若采用X平台,将采用本机构的代码托管方式进行托管。当前代码托管地址:https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler所有相关信息请参考方舟编译器官方开源网站。Q8:方舟编译器开源使用什么license?A8:方舟编译器采用MulanLicense,由业内众多专家和公司共同打造,并非由华为主导。详情请参考专业评论:开源中国:https://www.oschina.net/news/108840/mulanpsl-the-1st-opensource-license-of-china开源协会:https://mp.weixin.qq.com/s/1xqxxiNKhcgw4RRspAaW2AQ9:如何确认下载包的来源可靠?什么是MD5校验码?A9:OpenArkCompiler-0.2-ubuntu-16.04-x86_64.tar.gz二进制包的MD5码为:e7dc8b8c242f2d26429e2ad71dae3112OpenArkCompiler-0.2.tar.gz源码包的MD5码为:1bf859a67c8b9a2d4080bdaf15官网方舟]61据介绍,支持华为方舟编译器的第三方应用至少有45款。都是大家耳熟能详的APP,拥有大量的用户,但是我们还没有看到微信。具体名单如下: