作者:xianyuqiang 编译器首席架构师
ArkCompiler(方舟编译器)是组件化、可配置的多语言编译和运行平台,它既能支撑单一语言运行环境,也能支撑多种语言组合的运行环境。它目前主要支持的语言是JavaScript、TypeScript和Java。
一、概述
HarmonyOS的设计目标,是成为打通手机、PC、平板、电视、车机和智能穿戴等多种设备的统一操作系统。
图1 多设备互联
其应用开发有多编程语言、多范式的支持需求,其中高级编程语言包括JavaScript、TypeScript、Java等,开发范式包括声明式UI范式、分布式编程范式。
我们需要相应的编译器和运行时来支撑这些高级应用编程语言的高效开发、部署和运行。使应用开发者能使用同一套开发框架实现一次开发多端部署运行,并且让使用HarmonyOS设备的用户,能获得统一的用户体验。于是,ArkCompiler应运而生。
1. 目标
ArkCompiler是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,其设计目标是提供一个语言可插拔、组件可配置的多语言编译器运行时。
- 语言可插拔:设计架构上支持多种语言接入,ArkCompiler有能力提供具有高效执行性能且具有跨语言优势的多语言运行时,也可以在小设备上提供高效轻量的单一语言运行时。
- 组件可配置:ArkCompiler具有丰富的编译器运行时组件系统。通过定制化配置编译运行时的语言和组件,以支持手机、PC、平板、电视、汽车和智能穿戴等多种设备上不同的性能和内存需求。
2. 架构
如图2所示,ArkCompiler包含编译器、工具链、运行时等关键部件。ArkCompiler工具链实现对应语言的前端编译器,将前端开发框架的高级语言编译成统一的字节码/二进制文件。根据不同的应用场景,通过ArkCompiler运行时解释器解释执行字节码文件或JIT/AOT编译器编译执行对应体系架构的优化机器码,从而提升运行效率和启动性能。
图2 ArkCompiler运行原理
下面,本文将从前端编译器,运行时展开介绍。
二、前端编译器
前端编译器是高级语言通往语言运行时的桥梁,它按照语言规范,将编程语言表达的语义翻译为运行时能够理解的介质,在ArkCompiler解决方案里,这体现为ArkCompiler字节码。即图3中的ArkCompiler Bytecode(简称abc)。部分语言,也支持通过ArkCompiler的AOT Compiler组件直接将字节码编译成对应体系架构的优化机器码。