#wasm-interpreter #interpreter

sys fizzy

绑定到 Fizzy,一个快速、确定性和严格的 WebAssembly 解释器

4 个版本 (2 个重大更改)

0.8.0 2022 年 6 月 28 日
0.7.0 2021 年 3 月 1 日
0.6.0 2020 年 12 月 24 日
0.6.0-dev2020 年 10 月 7 日

#992 in WebAssembly

Apache-2.0

235KB
5.5K SLoC

C++ 4.5K SLoC // 0.1% comments Rust 1K SLoC // 0.1% comments Shell 7 SLoC // 0.4% comments

Fizzy

这是 Rust 对 Fizzy 的接口,Fizzy 是一个 WebAssembly 虚拟机。

有关更多信息,请参阅 上游仓库


lib.rs:

这是对 Fizzy 的 Rust 接口,Fizzy 是一个快速、确定性和严格的 WebAssembly 解释器。

示例

这是一个泛型示例,用于解析和实例化一个模块,并执行一个带有输入和输出的简单函数。

extern crate fizzy;

fn main() {
    // This wasm binary exports a single sum(u32, u32) -> u32 function.
    let wasm = [
        0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x07, 0x01, 0x60, 0x02, 0x7f,
        0x7f, 0x01, 0x7f, 0x03, 0x02, 0x01, 0x00, 0x07, 0x07, 0x01, 0x03, 0x73, 0x75, 0x6d,
        0x00, 0x00, 0x0a, 0x09, 0x01, 0x07, 0x00, 0x20, 0x00, 0x20, 0x01, 0x6a, 0x0b,
    ];
    let module = fizzy::parse(&wasm).expect("parsing failed");
    let mut instance = module.instantiate().expect("instantiation failed");
    let result = instance
        .execute(
            "sum",
            &[fizzy::TypedValue::U32(42), fizzy::TypedValue::U32(24)],
        )
        .expect("execution failed");
    let result = result
        .expect("return value expected")
        .as_u32()
        .expect("u32 expected as a return type");
    assert_eq!(result, 66);
}

无运行时依赖

~0–2MB
~38K SLoC