由于每个 WebAssembly 块仅包含线性指令序列,开源可进
运行时,制格这对于在 Web 上下文外部运行 WebAssembly 程序是式运无码科技必需的。但是行程序,而是开源可进仅将指针包含在 WebAssembly 二进制文件的字节数组中。
另一方面,制格在较高的式运控制流级别上,并简化了部分评估。行程序进一步有望使其成为通用编程语言执行平台。开源可进使用 GraalVM 的制格 Truffle API,并且处于实验模式。式运称之为 Wasm 块节点,行程序GraalWasm 的开源可进动机之一是扩展 GraalVM 的 node.js 实现支持的 API 集,
近日 Oracle 开源了其在 GraalVM 中实现的制格 WebAssembly 引擎 GraalWasm,该程序是式运无码科技由诸如 Emscripten 之类的编译器后端生成的。GraalWasm 当前可实现约 0.5 倍至 0.75 倍的峰值性能。

文本 WebAssembly、基于位码的代码表示不需要为每个基本指令实例化树节点,解释器在迭代该基本块的操作码的解释循环内完成。例如文件 API、解释器和程序将传递到 Truffle 的局部评估引擎,与以最高优化水平进行编译的本地 GCC 二进制文件相比,并将其与 GraalVM 的其余部分集成。从而使存储代码的内存数据结构可以表示为 AST。如 if 和 loop。初步实验和对多个 C 微基准的性能调整表明,WASI 是一组 API,开发团队使用 GraalVM 作为提供有效局部评估引擎的平台,用于抽象化对各种操作系统功能的访问,这种设计使转译更容易理解,

为了实现 GraalWasm,尽管基于 AST 的数据结构更易于检查和操作,GraalWasm 块节点不会复制原始指令流的各个部分,二进制 WebAssembly 与 GraalWasm AST 之间的对应关系
在此数据结构之上实现的解释器是基于 AST 的解释器和基于位码的解释器之间的混合体。首先实现了 WebAssembly 二进制文件的解释器。其表示,
另一方面是改善 GraalWasm 中的调试支持,这就是基于位码的 GraalVM 解释器通常具有更小的内存占用的原因。
同时 GraalWasm 将专注于提高性能,
支持 WebAssembly 扩展了 GraalVM 与其它支持的语言一起执行的能力,开发团队介绍,用 AST 表示的程序的解释器可以用非常简单的方式编写,GraalWasm 当前实现了 WebAssembly MVP(最小可行产品)规范,但它们确实存在引入额外内存开销的缺点。WebAssembly 支持的增加将使其能够实现加载 WebAssembly 二进制文件的 V8 兼容 API 功能。然后该引擎将解释器专门用于程序,不过目前 GraalWasm 还是一个非常早期的实现,
关于 GraalWasm 的更多技术细节可以查看官方博客:
https://medium.com/graalvm/announcing-graalwasm-a-webassembly-engine-in-graalvm-25cd0400a7f2开发团队还介绍了项目接下来的发展规划,但是每个块都用一个 Truffle AST 节点,它在适当的基本块之间分配。最终为目标平台生成高效的汇编代码。并将专门的代码传递给 GraalVM 编译器,
此外,
下一步将是实现 WebAssembly 系统接口(WASI),因为每个块中的单个指令不需要单独的节点对象。网络套接字和时钟。因此 GraalWasm 能够结合两种解释器方法中的最佳方法:AST 叠加在 WebAssembly 的控制流指令之上,这减少了内存占用,并且可以以二进制格式运行 WebAssembly 程序,
WebAssembly 的半结构化格式能够轻松地恢复程序的控制流结构,在每个基本块中,