Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
7e5ce65b
D
Docs
项目概览
OpenHarmony
/
Docs
大约 2 年 前同步成功
通知
161
Star
293
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
7e5ce65b
编写于
11月 10, 2022
作者:
O
openharmony_ci
提交者:
Gitee
11月 10, 2022
浏览文件
操作
浏览文件
下载
差异文件
!10595 Updating eTS Runtime's docs
Merge pull request !10595 from DaiHN/master
上级
70ef8203
da8750a3
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
24 addition
and
30 deletion
+24
-30
zh-cn/readme/ARK-Runtime-Subsystem-zh.md
zh-cn/readme/ARK-Runtime-Subsystem-zh.md
+24
-30
zh-cn/readme/figures/zh-cn_image_ark-js-arch.png
zh-cn/readme/figures/zh-cn_image_ark-js-arch.png
+0
-0
zh-cn/readme/figures/zh-cn_image_ark-ts-arch.png
zh-cn/readme/figures/zh-cn_image_ark-ts-arch.png
+0
-0
zh-cn/readme/figures/zh-cn_image_ark_frontend.png
zh-cn/readme/figures/zh-cn_image_ark_frontend.png
+0
-0
未找到文件。
zh-cn/readme/ARK-Runtime-Subsystem-zh.md
浏览文件 @
7e5ce65b
...
@@ -8,66 +8,60 @@
...
@@ -8,66 +8,60 @@
## 简介<a name="section11660541593"></a>
## 简介<a name="section11660541593"></a>
方舟编译器
\(
ArkCompiler
\)
是
OpenHarmony内置的组件化、可配置的多语言编译和运行平台,包含编译器、工具链、运行时等核心部件,支持高级编程语言在多种芯片平台上编译与运行,并支撑OpenHarmony标准操作系统及其应用和服务运行在手机、个人电脑、平板、电视、汽车和智能穿戴等多种设备上的需求。开源的ArkCompiler JS Runtime提供的能力是在OpenHarmony操作系统中编译和运行JavaScript语言
\(
本文后面简称JS
\)
。
方舟编译器
\(
ArkCompiler
\)
是
为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编译运行时平台。它支持包括动态类型和静态类型语言在内的多种编程语言,如JS、TS、ArkTS;它是支撑鸿蒙系统成为打通手机、PC、平板、电视、车机和智能穿戴等多种设备的操作系统的编译运行时底座
。
ArkCompiler JS Runtime分成两个部分,分别是JS编译工具链与JS运行时。JS工具链将JS源码编译成方舟字节码
\(
ArkCompiler Bytecode
\)
,JS运行时负责执行生成的方舟字节码
\(
后续如无特殊说明,字节码特指方舟字节码
\)
。
ArkCompiler主要分成两个部分:编译工具链与运行时.
**图1**
JS编译工具链架构:
**图1**
编译工具链架构


ArkCompiler
JS Runtime的源码编译器接收JS源码的输入,再由ts2abc(将JavaScript文件转换为字节码的工具)生成abc
文件。
ArkCompiler
的编译工具链以ArkTS/TS/JS源码作为输入,将其编译生成为abc(ArkCompiler Bytecode,即方舟字节码)
文件。
**图2**
JS运行时
\(
Ark-JS-Runtime
\)
架构:
**图2**
运行时架构


ArkCompiler
JS Runtime以方舟字节码文件作为输入并直接运行字节码文件,实现对应的JS
语义逻辑。
ArkCompiler
运行时直接运行字节码文件,实现对应语言规范的
语义逻辑。
JS Runtime
主要由四个子系统组成:
主要由四个子系统组成:
-
Core Subsystem
-
Core Subsystem
Core Subsystem主要由与语言无关的基础运行库组成,包括承载字节码的
ArkCompiler File组件、支持Debugger的Tooling组件、负责对应系统调用的ArkCompiler
Base库组件等。
Core Subsystem主要由与语言无关的基础运行库组成,包括承载字节码的
File组件、支持Debugger的Tooling组件、负责适配系统调用的
Base库组件等。
-
JS
Execution Subsystem
-
Execution Subsystem
执行引擎包含执行字节码的解释器、缓存隐藏类和内联缓存、以及剖析记录运行时类型
的Profiler。
Execution Subsystem包含执行字节码的解释器、快速路径内联缓存、以及抓取运行时信息
的Profiler。
-
JS
Compiler Subsystem
-
Compiler Subsystem
编译子系统包含Stub编译器、基于Circuit IR的优化编译
框架和代码生成器。
Compiler Subsystem包含Stub编译器、基于IR的编译优化
框架和代码生成器。
-
JS
Runtime subsystem
-
Runtime subsystem
运行时子系统包含了各种JS运行相关的模块:
Runtime Subsystem包含了ArkTS/TS/JS运行相关的模块。
- 内存管理:对象分配器与垃圾回收器\(并发标记和部分内存压缩的CMS-GC和Partial-Compressing-GC\)
- 内存管理:对象分配器与垃圾回收器\(并发标记和部分内存压缩的CMS-GC和Partial-Compressing-GC\)
- 分析工具:DFX工具、cpu和heap的profiling工具
- 分析工具:DFX工具、cpu和heap的profiling工具
- 并发管理:actor并发模型中的abc文件管理器
- 并发管理:actor并发模型中的abc文件管理器
- 标准库:Ecmascript规范定义的标准库、高效的container容器库与对象模型
- 标准库:Ecmascript规范定义的标准库、高效的container容器库与对象模型
- 其他:异步工作队列、TypeScript类型加载、跟C++交互的JSNAPI接口等。
- 其他:异步工作队列、TypeScript类型加载、跟C++交互的JSNAPI接口等。
**ArkCompiler-JS的设计特点:**
**ArkCompiler eTS Runtime的设计特点:**
-
ArkCompiler JS Runtime的主要设计目标:
为OpenHarmony操作系统提供JavaScript/TypeScript应用程序执行引擎,而不是作为浏览器中的JavaScript执行引擎。
-
原生支持类型
目前业界引擎执行TS的方式是先把TS转化为JS,再运行JS源码来完成对应的语义逻辑。ArkCompiler的编译工具链编译TS源码时,会分析推导TS的类型信息并将其传递给运行时。运行时直接使用类型信息在运行前预生成内联缓存(Inline Cache)以加速字节码执行。另外,TSAOT (Ahead-of-Time) Compiler,可以利用字节码文件中的类型信息,直接编译生成优化机器码,使得应用可以直接运行优化机器码,获得高性能运行体验。
-
为了提升应用的执行性能和安全性:
-
并发:并发模型优化与并发API
ArkCompiler
JS Runtime选择将JavaScript/TypeScript程序预先静态编译为方舟字节码(带上静态类型信息),从而减少运行时的编译和类型信息收集开销。另外出于安全性和性能的考虑,ArkCompiler J
S Runtime选择不支持eval和只支持strict模式的代码。
ArkCompiler
eTS Runtime选择将ArkTS程序预先静态编译为方舟字节码
\(
带上静态类型信息
\)
,从而减少运行时的编译和类型信息收集开销。另外出于安全性和性能的考虑,ArkCompiler eT
S Runtime选择不支持eval和只支持strict模式的代码。
-
原生支持TypeScript:
-
原生支持TypeScript:
ECMAScript规范没有提供并发语义表述;业界引擎,如浏览器或者Node.js,通常会提供基于Actor并发模型的Worker API来支持多线程开发。Actor模型下执行体之间不共享任何数据对象,通过消息机制进行通信。因此Web引擎或者Node.js引擎的Worker都有启动速度慢、内存占用高这些缺陷。 针对这些缺陷,ArkCompiler的运行时已经实现了Actor实例中的不可变或者不易变的对象(方法和字节码)的共享,较大程度地优化了Actor的启动性能和启动内存。
方舟编译运行时不只提供了业界通用的Worker API,还提供了TaskPool作为并发API的增强。TaskPool是一个支持优先级调度、工作线程自动扩缩容的任务池功能库。开发者无需关心并发实例的生命周期,也无需关心任务负载变化时需要创建或者销毁并发实例,极大地简化了高性能多线程鸿蒙应用的开发。
目前业界通用的执行方式是把TS转化为JS,再通过JS运行时来执行。ArkJS规划在ts2abc编译TS源码时,会推导分析TS的类型信息并传递给ArkCompiler JS运行时。运行时直接利用类型信息静态生成内联缓存(inline caching)从而加速字节码执行。另外,ArkJS规划中的TSAOT
\(
Ahead-of-Time
\)
Compiler,可以利用ts2abc传递的类型信息,直接编译生成高质量的机器码,使得应用可以直接以机器码形式运行,提升运行性能。
-
轻量级Actor并发模型:
ECMAScript没有提供并发规范,业界JS引擎的实现中常用Actor并发模型。此模型下执行体之间不共享任何数据,通过消息机制进行通信。业界当前实现的JS Actor模型(web-worker)有启动速度慢、内存占用高这些缺陷。为了利用设备的多核能力获得更好的性能提升,ArkCompiler JS Runtime需要提供启动快、内存占用少的Actor实现。目前ArkCompiler JS运行时已经实现在Actor内存隔离模型的基础上,共享actor实例中的不可变或者不易变的对象(方法和字节码),后续继续共享内建代码块、常量字符串等等,来提升JS Actor的启动性能和节省内存开销,达到实现轻量级Actor并发模型的目标。
-
TypeScript/C++的跨语言交互:
在OpenHarmony操作系统平台API实现中,通常需要面临C/C++代码访问和操作TS对象的场景。对这个业务场景,Ark-JS规划可以根据TS程序中的class声明和运行时约定,静态生成包含TS对象布局描述的C/C++头文件,以及操作这些TS对象的C/C++实现库。在C/C++代码中,通过包含TS对象描述头文件以及链接对应实现库,实现直接操作TS对象的效果。由于TS类型或其内在布局并非总是固定不变的,因此在TS对象操作的代码实现中,会插入类型检查,如果对象类型或布局在运行时发生变化,则回退执行通用的慢速路径。
-
安全
ArkCompiler前端编译工具链将ArkTS/TS/JS程序预先静态编译为方舟字节码,并且还提供了多重混淆能力的增强,有效地提升了开发者代码资产的安全强度。另外出于安全的考虑,ArkCompiler不支持sloppy模式的JS代码,也不支持eval等运行动态字符串的功能。
## 目录<a name="section161941989596"></a>
## 目录<a name="section161941989596"></a>
...
...
zh-cn/readme/figures/zh-cn_image_ark-js-arch.png
已删除
100644 → 0
浏览文件 @
70ef8203
33.6 KB
zh-cn/readme/figures/zh-cn_image_ark-ts-arch.png
0 → 100644
浏览文件 @
7e5ce65b
109.8 KB
zh-cn/readme/figures/zh-cn_image_ark_frontend.png
查看替换文件 @
70ef8203
浏览文件 @
7e5ce65b
15.4 KB
|
W:
|
H:
39.3 KB
|
W:
|
H:
2-up
Swipe
Onion skin
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录