方舟编译器 JS 运行时子系统 (ARK-JS) 正式开源

方舟(ARK) 是华为自研的统一编程平台,包含编译器、工具链、运行时等关键部件,支持高级语言在多种芯片平台的编译与运行,并支撑 OpenHarmony 操作系统及其应用和服务运行在手机、个人电脑、平板、电视、汽车和智能穿戴等多种设备上的需求。

本次开源的 ARK-JS 提供的能力是在 OpenHarmony 操作系统中编译和运行 JavaScript 语言(本文后面简称 JS)。

本次开源的 ARK-JS 分成两个部分,分别是 JS 编译工具链 JS 运行时JS 工具链将 JS 源码编译成方舟字节码 (ARK Bytecode),JS 运行时负责执行生成的方舟字节码(后续如无特殊说明,字节码特指方舟字节码)。

JS 编译工具链架构

方舟编译器 JS 运行时子系统 (ARK-JS) 正式开源

架构说明:JS 前端编译器将 JavaScript 源码解析为 AST,再经过 AST 变换、字节码生成器、寄存器分配后,由 native emiter 产生方舟字节码文件(abc 文件)。

JS 运行时 (Runtime) 架构

方舟编译器 JS 运行时子系统 (ARK-JS) 正式开源

架构说明:

ARK-JS Runtime 以方舟字节码文件(abc 文件)作为输入并直接运行字节码文件,实现对应的 JS 语义逻辑。

ARK-JS Runtime 主要由四个部分组成:

  • Core Runtime

    Core Runtime 主要由语言无关的基础运行库组成,包括承载字节码的 ARK File 组件、支持 Debugger 的 Tooling 组件、负责对应系统调用的 ARK Base 组件等。

  • Execution Engine

    执行引擎目前包含执行字节码的解释器、缓存隐藏类和内联缓存、以及剖析记录运行时类型的 Profiler。

  • ECMAScript Runtime

    ECMAScript Runtime 则包含了各种 JS 对象的分配器、垃圾回收器、以及用以支撑 ECMAScript 规范的内部运行库。

  • AFFI (ARK Foreign Function Interface)

    AFFI 是 ARK JS 运行时的 C++ 语言外部函数接口。

目前开源的仓库总共有三个:

/ark
├── js_runtime       # JS运行时组件
├── runtime_core     # 运行时公共组件
└── ts2abc           # 方舟编译器中JavaScript语言的前端工具

仓库地址

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/145357.html

(0)
上一篇 2021年9月7日
下一篇 2021年9月7日

相关推荐

发表回复

登录后才能评论