请选择 进入手机版 | 继续访问电脑版

石家庄老站长

点击联系客服
客服QQ:509006671 客服微信:mengfeiseo
 找回密码
 立即注册
查看: 24|回复: 0

方舟JavaScript引擎

[复制链接]

1

主题

1

帖子

-7

积分

限制会员

积分
-7
发表于 2021-4-2 14:40:38 | 显示全部楼层 |阅读模式
开源以后,方舟编程体系逐渐成熟,编译器、引擎、调试器等陆续开放。这次开源是JavaScript引擎。与Java引擎一样,这是集成编译器生成的MapleIR。图1显示了发动机(红色部分)在整个方舟系统中的位置。





图一,方舟系统示意图

由于依赖集成MapleIR运行,因此引擎与高级语言大不相关。当然,必须单独支持特定于语言的特性。引擎可以在多语言运行环境中运行JavaScript,混合运行C/C  /Java/JavaScript等多语言程序。基于此实现的调试器也可以进行多语言调试。

方舟多语言引擎分为两类:处理静态类型语言(如Java)和动态类型编程语言(如JavaScript)的静态类型语言和动态类型编程语言(如JavaScript)。静态类型程序在编译时确定数据类型,编译的程序只有显式数据类型转换,动态类型程序在运行时确定数据类型,数据类型操作存在较大差异,运行时需要隐式类型转换。为了减少运行时性能开销,设计了两种类型的方舟多语言引擎。这两种类型的方舟多语言引擎可以在函数级别完成多语言程序的混合执行。方舟JavaScript引擎是动态类型,以前引入的Java引擎是静态类型。

方舟JavaScript引擎支持开发JavaScript应用程序,并在Internet  of  Internet(IoT)和手机设备上运行JavaScript应用程序。JavaScript应用程序开发框架通常用多种编程语言实现。也就是说,同时考虑功能可扩展性(JavaScript)和运行时性能(例如C/C)。JS应用程序开发也有类似的要求。方舟编程系统的多语言联合编译满足了JavaScript引擎成为重要组成部分的这种需求。

此次推出的方舟JS引擎涉及编译器JS前端(目前暂时用SpiderMonkey、后续MapleFE代替)、JS后端、JS运行时、JS调试器等方舟编程系统的不同部分。图2显示了引擎的主要操作模块。JavaScript应用程序或框架程序通过前端转换为Maple  IR的中间代码。方舟编译器可以进一步优化,在后端生成MapleIR指令代码,然后在方舟JavaScript引擎上运行这些MapleIR代码。在运行时确定数据类型并执行相应的类型转换。





图2,方舟JavaScript发动机结构图

方舟JavaScript引擎实现了大部分JavaScript  5.1标准。由于JavaScript语言(如Eval()和Function构造函数)的动态语言特性,可以在运行时创建和运行JS代码,因此JavaScript前端必须在运行时执行语法分析和生成代码,暂时不实施,以后将集成自己的研究MapleFE来实现所有功能。此外,以事件为中心的体系结构和ECMA-402标准尚未实施。

此次方舟JS引擎实现了绝大多数基本功能。但是,要获得高性能的JavaScript引擎,必须先添加方舟实时(JIT)编译器。方舟JIT编译器可以根据运行时类型信息和其他程序动态信息执行程序优化。JIT编译器基于方舟编译器。此次开源不包括JIT编译器,将在下次发行时上市。

方舟引擎和方舟体系还有很大的改善空间,我会和开源社区的朋友们一起努力完善它。

苹果引擎代码仓库:

https://gitee.com/openark  compiler-incubator/maple  _ engine

开源方舟编译器微信公众号





微信号:openarkcompiler

功能简介:方舟编译器是一个集成编程平台,旨在支持多种编程语言、多芯片平台的联合编译和执行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|无图版|手机版|小黑屋|石家庄@IT精英团

GMT+8, 2021-5-10 15:45 , Processed in 0.117651 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2021 Comsenz Inc.

快速回复 返回顶部 返回列表