#打卡不停更#【FFH】浅析OpenHarmony方舟运行时 原创

Hagon
发布于 2022-10-29 19:54
浏览
1收藏

@TOC

浅析OpenHarmony方舟运行时

开发人员写的JS代码,系统是无法直接读懂的,具体系统是怎么读懂的呢?就关系到我们这篇文章要讲的OpenHamony方舟运行时

JS VM (JavaScript Virtual Machine)

#打卡不停更#【FFH】浅析OpenHarmony方舟运行时-鸿蒙开发者社区
在说方舟运行时之前,我们先来看看上一小节看到的JS VM (JavaScript Virtual Machine), 刚开始看到这个名称肯定会感觉很陌生。

首先说一下什么是虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,在实体计算机中能够完成的工作在虚拟机中都能够实现。用通俗的话一句话概括,虚拟机就是一个模拟电脑的应用程序,在这个应用程序里面,你可以干任何能在实体计算机上干的事。这个模拟的电脑里面有相应的操作系统,还有其他实体物理计算机所拥有的环境,并且该虚拟电脑是一个独立的个体,和其他系统互不干扰。

那什么是JS VM (JavaScript Virtual Machine)呢?JS VM(JS虚拟机)也称为 JavaScript 引擎,程序员写的JS代码系统是无法直接执行的,因为系统根本看不懂JS代码,那就需要一个角色去翻译,然后去执行翻译之后的代码,这个角色可以认为是JS VM

总的来说,JS VM是一个专门处理JavaScript代码的虚拟机,用于解析和执行JavaScript脚本代码

方舟编译器JS运行时(ArkCompiler JS Runtime)

在OpenHarmony中,ArkCompiler JS Runtime就可以认为是一个JS VM或者JavaScript引擎,ArkCompiler JS Runtime分成两个部分,分别是JS编译工具链JS运行时。JS工具链将JS源码编译成方舟字节码(ArkCompiler Bytecode),JS运行时负责执行生成的方舟字节码(后续如无特殊说明,字节码特指方舟字节码)。

以下是JS编译链架构图:

#打卡不停更#【FFH】浅析OpenHarmony方舟运行时-鸿蒙开发者社区

ArkCompiler JS Runtime的源码编译器接收JS源码的输入,再由ts2abc(将JavaScript文件转换为方舟字节码的工具)生成abc文件(方舟字节码文件)

如下图,JS编译工具链生成的方舟字节码文件再作为输入源,输入到JS Runtime并直接运行字节码文件。

#打卡不停更#【FFH】浅析OpenHarmony方舟运行时-鸿蒙开发者社区

JS Runtime主要由四个子系统组成:

  • Core Subsystem

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

  • JS Execution Subsystem

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

  • JS Compiler Subsystem

    编译子系统包含Stub编译器、基于Circuit IR的优化编译框架和代码生成器。

  • JS Runtime subsystem

    运行时子系统包含了各种JS运行相关的模块:

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

最后方舟字节码通过JS Runtime的四个子系统,就可以让机器读懂开发人员写的JS代码,最终实现对应的JS语义逻辑。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-10-29 19:54:33修改
3
收藏 1
回复
举报
1条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

方舟编译器看来确实功能强大

回复
2022-10-31 15:20:03
回复
    相关推荐