arkcompiler_ets_runtime/docs/overview-zh.md
yaochaonan de3fe6bf2d doc 鸿蒙修改为OpenHarmony
-----
https://gitee.com/openharmony/arkcompiler_ets_runtime/issues/I6RNIY?from=project-issue

Signed-off-by: yaochaonan <yaochaonan@huawei.com>
Change-Id: Iae78dc17c84029f0dba418f3a5db2b9046df9c41
2023-03-30 16:10:33 +08:00

3.9 KiB
Raw Blame History

概述

方舟编译器(ArkCompiler)是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编译运行时平台。它支持包括动态类型和静态类型语言在内的多种编程语言如JS、TS、ArkTS它是支撑OpenHarmony系统成为打通手机、PC、平板、电视、车机和智能穿戴等多种设备的操作系统的编译运行时底座。

ArkCompiler主要分成两个部分编译工具链与运行时。 编译工具链架构如下:

图1 编译工具链架构如下:

ArkCompiler的编译工具链以ArkTS/TS/JS源码作为输入将其编译生成为abc(ArkCompiler Bytecode即方舟字节码)文件。 运行时架构如下:

图2 ArkCompiler运行时架构

ArkCompiler运行时直接运行字节码文件实现对应语言规范的语义逻辑。

ArkCompiler eTS Runtime主要由四个子系统组成

  • Core Subsystem

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

  • Execution Subsystem

    Execution Subsystem包含执行字节码的解释器、快速路径内联缓存、以及抓取运行时信息的Profiler。

  • Compiler Subsystem

    Compiler Subsystem包含Stub编译器、基于IR的编译优化框架和代码生成器。

  • Runtime subsystem

    Runtime Subsystem包含了ArkTS/TS/JS运行相关的模块

    • 内存管理:对象分配器与垃圾回收器并发标记和部分内存压缩的CMS-GC和Partial-Compressing-GC
    • 分析工具DFX工具、cpu和heap的profiling工具
    • 并发管理actor并发模型中的abc文件管理器
    • 标准库Ecmascript规范定义的标准库、高效的container容器库与对象模型
    • 其他异步工作队列、TypeScript类型加载、跟C++交互的ArkTS NAPI接口等

ArkCompiler 的设计特点:

  • 原生支持类型 目前业界引擎执行TS的方式是先把TS转化为JS再运行JS源码来完成对应的语义逻辑。ArkCompiler的编译工具链编译TS源码时会分析推导TS的类型信息并将其传递给运行时。运行时直接使用类型信息在运行前预生成内联缓存Inline Cache以加速字节码执行。另外TSAOT (Ahead-of-Time) Compiler可以利用字节码文件中的类型信息直接编译生成优化机器码使得应用可以直接运行优化机器码获得高性能运行体验。

  • 并发并发模型优化与并发API ECMAScript规范没有提供并发语义表述业界引擎如浏览器或者Node.js通常会提供基于Actor并发模型的Worker API来支持多线程开发。Actor模型下执行体之间不共享任何数据对象通过消息机制进行通信。因此Web引擎或者Node.js引擎的Worker都有启动速度慢、内存占用高这些缺陷。 针对这些缺陷ArkCompiler的运行时已经实现了Actor实例中的不可变或者不易变的对象方法和字节码的共享较大程度地优化了Actor的启动性能和启动内存。 方舟编译运行时不只提供了业界通用的Worker API还提供了TaskPool作为并发API的增强。TaskPool是一个支持优先级调度、工作线程自动扩缩容的任务池功能库。开发者无需关心并发实例的生命周期也无需关心任务负载变化时需要创建或者销毁并发实例极大地简化了高性能多线程OpenHarmony应用的开发。

  • 安全 ArkCompiler前端编译工具链将ArkTS/TS/JS程序预先静态编译为方舟字节码并且还提供了多重混淆能力的增强有效地提升了开发者代码资产的安全强度。另外出于安全的考虑ArkCompiler不支持sloppy模式的JS代码也不支持eval等运行动态字符串的功能。