数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 825|回复: 0

[业界] Oracle开源WebAssembly引擎GraalWasm:可二进制格式运行程序

[复制链接]
发表于 2020-1-3 09:48:44 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
近日 Oracle 开源了其在 GraalVM 中实现的 WebAssembly 引擎 GraalWasm,开发团队介绍,GraalWasm 当前实现了 WebAssembly MVP(最小可行产品)规范,并且可以以二进制格式运行 WebAssembly 程序,该程序是由诸如 Emscripten 之类的编译器后端生成的。
支持 WebAssembly 扩展了 GraalVM 与其它支持的语言一起执行的能力,进一步有望使其成为通用编程语言执行平台。不过目前 GraalWasm 还是一个非常早期的实现,并且处于实验模式。
为了实现 GraalWasm,开发团队使用 GraalVM 作为提供有效局部评估引擎的平台,使用 GraalVM 的 Truffle API,首先实现了 WebAssembly 二进制文件的解释器。
WebAssembly 的半结构化格式能够轻松地恢复程序的控制流结构,从而使存储代码的内存数据结构可以表示为 AST。用 AST 表示的程序的解释器可以用非常简单的方式编写,但是,尽管基于 AST 的数据结构更易于检查和操作,但它们确实存在引入额外内存开销的缺点。
另一方面,基于位码的代码表示不需要为每个基本指令实例化树节点,这就是基于位码的 GraalVM 解释器通常具有更小的内存占用的原因。
由于每个 WebAssembly 块仅包含线性指令序列,因此 GraalWasm 能够结合两种解释器方法中的最佳方法:AST 叠加在 WebAssembly 的控制流指令之上,如 if 和 loop。但是每个块都用一个 Truffle AST 节点,称之为 Wasm 块节点,这减少了内存占用,因为每个块中的单个指令不需要单独的节点对象。
此外,GraalWasm 块节点不会复制原始指令流的各个部分,而是仅将指针包含在 WebAssembly 二进制文件的字节数组中。
在此数据结构之上实现的解释器是基于 AST 的解释器和基于位码的解释器之间的混合体。在较高的控制流级别上,它在适当的基本块之间分配。在每个基本块中,解释器在迭代该基本块的操作码的解释循环内完成。这种设计使转译更容易理解,并简化了部分评估。
运行时,解释器和程序将传递到 Truffle 的局部评估引擎,然后该引擎将解释器专门用于程序,并将专门的代码传递给 GraalVM 编译器,最终为目标平台生成高效的汇编代码。

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-20 23:32 , Processed in 0.124800 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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