# 方舟è¿è¡Œæ—¶å系统<a name="ZH-CN_TOPIC_0000001138852894"></a> - [方舟è¿è¡Œæ—¶å系统<a name="ZH-CN_TOPIC_0000001138852894"></a>](#方舟è¿è¡Œæ—¶å系统) - [简介<a name="section11660541593"></a>](#简介) - [目录<a name="section161941989596"></a>](#目录) - [使用指å—<a name="section18393638195820"></a>](#使用指å—) - [相关仓<a name="section1371113476307"></a>](#相关仓) ## 简介<a name="section11660541593"></a> 方舟编译器\(ArkCompiler\)是为支æŒå¤šç§ç¼–程è¯è¨€ã€å¤šç§èŠ¯ç‰‡å¹³å°çš„è”åˆç¼–译ã€è¿è¡Œè€Œè®¾è®¡çš„统一编译è¿è¡Œæ—¶å¹³å°ã€‚它支æŒåŒ…括动æ€ç±»åž‹å’Œé™æ€ç±»åž‹è¯è¨€åœ¨å†…的多ç§ç¼–程è¯è¨€ï¼Œå¦‚JSã€TSã€ArkTS;它是支撑OpenHarmony系统æˆä¸ºæ‰“通手机ã€PCã€å¹³æ¿ã€ç”µè§†ã€è½¦æœºå’Œæ™ºèƒ½ç©¿æˆ´ç‰å¤šç§è®¾å¤‡çš„æ“ä½œç³»ç»Ÿçš„ç¼–è¯‘è¿è¡Œæ—¶åº•座。 ArkCompiler主è¦åˆ†æˆä¸¤ä¸ªéƒ¨åˆ†ï¼šç¼–译工具链与è¿è¡Œæ—¶. **图1** 编译工具链架构  ArkCompiler的编译工具链以ArkTS/TS/JSæºç 作为输入,将其编译生æˆä¸ºabc(ArkCompiler Bytecodeï¼Œå³æ–¹èˆŸå—节ç )文件。 **图2** è¿è¡Œæ—¶æž¶æž„  ArkCompilerè¿è¡Œæ—¶ç›´æŽ¥è¿è¡Œå—èŠ‚ç æ–‡ä»¶ï¼Œå®žçŽ°å¯¹åº”è¯è¨€è§„范的è¯ä¹‰é€»è¾‘。 主è¦ç”±å››ä¸ªå系统组æˆï¼š - 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++交互的JSNAPI接å£ç‰ã€‚ **ArkCompiler eTS Runtime的设计特点:** - 原生支æŒç±»åž‹ ç›®å‰ä¸šç•Œå¼•擎执行TSçš„æ–¹å¼æ˜¯å…ˆæŠŠTS转化为JS,å†è¿è¡ŒJSæºç æ¥å®Œæˆå¯¹åº”çš„è¯ä¹‰é€»è¾‘。ArkCompiler的编译工具链编译TSæºç æ—¶ï¼Œä¼šåˆ†æžæŽ¨å¯¼TS的类型信æ¯å¹¶å°†å…¶ä¼ 递给è¿è¡Œæ—¶ã€‚è¿è¡Œæ—¶ç›´æŽ¥ä½¿ç”¨ç±»åž‹ä¿¡æ¯åœ¨è¿è¡Œå‰é¢„生æˆå†…è”缓å˜ï¼ˆInline Cacheï¼‰ä»¥åŠ é€Ÿå—èŠ‚ç æ‰§è¡Œã€‚å¦å¤–,TSAOT (Ahead-of-Time) Compiler,å¯ä»¥åˆ©ç”¨å—èŠ‚ç æ–‡ä»¶ä¸çš„类型信æ¯ï¼Œç›´æŽ¥ç¼–译生æˆä¼˜åŒ–机器ç ,使得应用å¯ä»¥ç›´æŽ¥è¿è¡Œä¼˜åŒ–机器ç ,获得高性能è¿è¡Œä½“验。 - å¹¶å‘ï¼šå¹¶å‘æ¨¡åž‹ä¼˜åŒ–与并å‘API ArkCompiler eTS Runtime选择将ArkTS程åºé¢„å…ˆé™æ€ç¼–译为方舟å—节ç \(å¸¦ä¸Šé™æ€ç±»åž‹ä¿¡æ¯\),从而å‡å°‘è¿è¡Œæ—¶çš„ç¼–è¯‘å’Œç±»åž‹ä¿¡æ¯æ”¶é›†å¼€é”€ã€‚å¦å¤–出于安全性和性能的考虑,ArkCompiler eTS Runtimeé€‰æ‹©ä¸æ”¯æŒevalå’Œåªæ”¯æŒstrict模å¼çš„代ç 。 - 原生支æŒTypeScript: 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ç‰è¿è¡ŒåЍæ€å—符串的功能。 ## 目录<a name="section161941989596"></a> ``` /arkcompiler ├── ets_runtime # ArkTSè¿è¡Œæ—¶ç»„ä»¶ ├── runtime_core # è¿è¡Œæ—¶å…¬å…±ç»„ä»¶ ├── ets_frontend # ArkTSè¯è¨€çš„å‰ç«¯å·¥å…· └── toolchain # ArkTS工具链 ``` ## 使用指å—<a name="section18393638195820"></a> [方舟è¿è¡Œæ—¶ä½¿ç”¨æŒ‡å—](https://gitee.com/openharmony/arkcompiler_ets_runtime/blob/master/docs/README_zh.md) ## 相关仓<a name="section1371113476307"></a> [arkcompiler\_runtime\_core](https://gitee.com/openharmony/arkcompiler_runtime_core) [arkcompiler\_ets\_runtime](https://gitee.com/openharmony/arkcompiler_ets_runtime) [arkcompiler\_ets\_frontend](https://gitee.com/openharmony/arkcompiler_ets_frontend) [arkcompiler\_toolchain](https://gitee.com/openharmony/arkcompiler_toolchain)