From 6dbbabbd10aaf5ea991d2d58fd8f47bd595194cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=BB=BA=E5=9B=BD?= <852851198@qq.com> Date: Tue, 19 Jul 2022 07:54:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9redeme=E6=8F=90=E9=AB=98?= =?UTF-8?q?=E5=8F=AF=E8=AF=BB=E6=80=A7=20=E5=9D=9A=E6=9E=9C852851188@qq.co?= =?UTF-8?q?m?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 徐建国 <852851198@qq.com> --- zh-cn/readme/ARK-Runtime-Subsystem-zh.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/zh-cn/readme/ARK-Runtime-Subsystem-zh.md b/zh-cn/readme/ARK-Runtime-Subsystem-zh.md index 6016dc3a7f..ed7dadfeeb 100644 --- a/zh-cn/readme/ARK-Runtime-Subsystem-zh.md +++ b/zh-cn/readme/ARK-Runtime-Subsystem-zh.md @@ -39,7 +39,7 @@ JS Runtime主要由四个子系统组成: 编译子系统包含Stub编译器、基于Circuit IR的优化编译框架和代码生成器。 - JS Runtime subsystem - + 运行时子系统包含了各种JS运行相关的模块: - 内存管理:对象分配器与垃圾回收器\(并发标记和部分内存压缩的CMS-GC和Partial-Compressing-GC\) - 分析工具:DFX工具、cpu和heap的profiling工具 @@ -49,15 +49,25 @@ JS Runtime主要由四个子系统组成: **ArkCompiler-JS的设计特点:** -- ArkCompiler JS Runtime的主要设计目标,是为OpenHarmony操作系统提供JavaScript/TypeScript应用程序执行引擎,而不是作为浏览器中的JavaScript执行引擎。 +- ArkCompiler JS Runtime的主要设计目标: + + 为OpenHarmony操作系统提供JavaScript/TypeScript应用程序执行引擎,而不是作为浏览器中的JavaScript执行引擎。 + +- 为了提升应用的执行性能和安全性: + + ArkCompiler JS Runtime选择将JavaScript/TypeScript程序预先静态编译为方舟字节码(带上静态类型信息),从而减少运行时的编译和类型信息收集开销。另外出于安全性和性能的考虑,ArkCompiler JS Runtime选择不支持eval和只支持strict模式的代码。 + +- 原生支持TypeScript: + + 目前业界通用的执行方式是把TS转化为JS,再通过JS运行时来执行。ArkJS规划在ts2abc编译TS源码时,会推导分析TS的类型信息并传递给ArkCompiler JS运行时。运行时直接利用类型信息静态生成内联缓存(inline caching)从而加速字节码执行。另外,ArkJS规划中的TSAOT \(Ahead-of-Time\) Compiler,可以利用ts2abc传递的类型信息,直接编译生成高质量的机器码,使得应用可以直接以机器码形式运行,提升运行性能。 -- 为了提升应用的执行性能和安全性,ArkCompiler JS Runtime选择将JavaScript/TypeScript程序预先静态编译为方舟字节码(带上静态类型信息),从而减少运行时的编译和类型信息收集开销。另外出于安全性和性能的考虑,ArkCompiler JS Runtime选择不支持eval和只支持strict模式的代码。 +- 轻量级Actor并发模型: -- 原生支持TypeScript:目前业界通用的执行方式是把TS转化为JS,再通过JS运行时来执行。ArkJS规划在ts2abc编译TS源码时,会推导分析TS的类型信息并传递给ArkCompiler JS运行时。运行时直接利用类型信息静态生成内联缓存(inline caching)从而加速字节码执行。另外,ArkJS规划中的TSAOT \(Ahead-of-Time\) Compiler,可以利用ts2abc传递的类型信息,直接编译生成高质量的机器码,使得应用可以直接以机器码形式运行,提升运行性能。 + ECMAScript没有提供并发规范,业界JS引擎的实现中常用Actor并发模型。此模型下执行体之间不共享任何数据,通过消息机制进行通信。业界当前实现的JS Actor模型(web-worker)有启动速度慢、内存占用高这些缺陷。为了利用设备的多核能力获得更好的性能提升,ArkCompiler JS Runtime需要提供启动快、内存占用少的Actor实现。目前ArkCompiler JS运行时已经实现在Actor内存隔离模型的基础上,共享actor实例中的不可变或者不易变的对象(方法和字节码),后续继续共享内建代码块、常量字符串等等,来提升JS Actor的启动性能和节省内存开销,达到实现轻量级Actor并发模型的目标。 -- 轻量级Actor并发模型:ECMAScript没有提供并发规范,业界JS引擎的实现中常用Actor并发模型。此模型下执行体之间不共享任何数据,通过消息机制进行通信。业界当前实现的JS Actor模型(web-worker)有启动速度慢、内存占用高这些缺陷。为了利用设备的多核能力获得更好的性能提升,ArkCompiler JS Runtime需要提供启动快、内存占用少的Actor实现。目前ArkCompiler JS运行时已经实现在Actor内存隔离模型的基础上,共享actor实例中的不可变或者不易变的对象(方法和字节码),后续继续共享内建代码块、常量字符串等等,来提升JS Actor的启动性能和节省内存开销,达到实现轻量级Actor并发模型的目标。 +- TypeScript/C++的跨语言交互: -- TypeScript/C++的跨语言交互:在OpenHarmony操作系统平台API实现中,通常需要面临C/C++代码访问和操作TS对象的场景。对这个业务场景,Ark-JS规划可以根据TS程序中的class声明和运行时约定,静态生成包含TS对象布局描述的C/C++头文件,以及操作这些TS对象的C/C++实现库。在C/C++代码中,通过包含TS对象描述头文件以及链接对应实现库,实现直接操作TS对象的效果。由于TS类型或其内在布局并非总是固定不变的,因此在TS对象操作的代码实现中,会插入类型检查,如果对象类型或布局在运行时发生变化,则回退执行通用的慢速路径。 + 在OpenHarmony操作系统平台API实现中,通常需要面临C/C++代码访问和操作TS对象的场景。对这个业务场景,Ark-JS规划可以根据TS程序中的class声明和运行时约定,静态生成包含TS对象布局描述的C/C++头文件,以及操作这些TS对象的C/C++实现库。在C/C++代码中,通过包含TS对象描述头文件以及链接对应实现库,实现直接操作TS对象的效果。由于TS类型或其内在布局并非总是固定不变的,因此在TS对象操作的代码实现中,会插入类型检查,如果对象类型或布局在运行时发生变化,则回退执行通用的慢速路径。 ## 目录 -- GitLab