#portable #run #everywhere #intended #llvm

夜间版 无 std wasm-core

可移植 WebAssembly 实现

19 个版本

使用旧的 Rust 2015

0.2.15 2018 年 5 月 3 日
0.2.14 2018 年 5 月 3 日
0.2.13 2018 年 4 月 29 日
0.2.2 2018 年 3 月 31 日
0.0.0 2018 年 3 月 11 日

#7 in #everywhere


3 crates 中使用

LGPL-3.0

455KB
11K SLoC

wasm-core

Crates.io

旨在在任何地方运行的可移植 WebAssembly 实现。


特性

高效

wasm-core 包含两个执行引擎,一个解释器和基于 LLVM 的 JIT。前者主要用于资源受限或不受 LLVM MCJIT 支持的平台,后者设计用于高性能,应在可能的情况下使用。

通过 LLVM 优化和按需编译,wasm-core 的 JIT 引擎能够在 x86-64 上实现接近原生性能。

可移植

wasm-core 支持 no_std。这意味着它可以在任何有 libcoreliballoc 可用的平台上运行,包括许多嵌入式设备和甚至操作系统内核。

安全

默认执行环境完全沙箱化,这意味着用户代码在没有明确原生导入的情况下无法访问外部环境。

易于集成

可以通过实现 NativeResolver 特性轻松导入外部函数,外部可以轻松调用导出的 WebAssembly 函数。请参见 Ice Core 作为示例。

如何使用

不是直接加载 WebAssembly 文件,wasm-core 使用 wasm-translator crate 在 translator/ 下生成的从原始 WebAssembly 代码生成的 IR 格式代码。

请参见 Ice Core 作为执行纯-wasm 代码的示例,以及 wa/ 作为执行由 Emscripten 生成的 wasm 的示例。(注意:一旦 LLVM 的 WebAssembly 后端变得稳定且可以从 clang 完全使用,可能将删除对 Emscripten 生成代码的支持。)

错误

请参见带有 bug 标记的问题。

贡献

欢迎为此项目做出贡献!如果您修复了错误,请直接提交拉取请求;如果您想添加新功能,请首先提交讨论问题。

依赖关系

~0.5–8.5MB
~135K SLoC