111 个版本 (65 个稳定)
新版本 24.0.0 | 2024 年 8 月 20 日 |
---|---|
23.0.2 | 2024 年 8 月 12 日 |
23.0.1 | 2024 年 7 月 22 日 |
22.0.0 | 2024 年 6 月 20 日 |
0.0.0 | 2018 年 10 月 30 日 |
38 在 WebAssembly 中
388,302 每月下载量
在 577 个 Crates 中使用 (178 直接使用)
3.5MB
55K SLoC
关于
此 crate 是 Wasmtime 项目的 Rust 嵌入式 API:一个用于运行 WebAssembly 程序的跨平台引擎。Wasmtime 的显著特性包括
-
快速。Wasmtime 基于优化的 Cranelift 代码生成器,可以快速生成高质量的机器代码,无论是在运行时还是在编译时。Wasmtime 的运行时也针对高效实例化、嵌入式程序与 wasm 之间的低开销转换和并发实例的可扩展性进行了优化。
-
安全. Wasmtime的开发非常注重其实施的正确性,通过Google的OSS Fuzz提供的全天候模糊测试进行验证,利用Rust的API和运行时安全保证,通过RFC流程仔细设计特性和API,当出现问题时实施安全策略,并制定发布策略以修复旧版本。我们遵循深度防御的最佳实践,并为Spectre等问题提供已知保护和缓解措施。最后,我们通过与学术研究人员合作,通过形式验证Wasmtime和Cranelift的关键部分,努力推动技术前沿。
-
可配置. Wastime支持丰富的API和构建时配置,提供许多选项,例如进一步限制WebAssembly的额外手段,例如CPU和内存消耗等基本保证。Wasmtime还可以在从微型环境到大型服务器上运行,拥有许多并发实例。
-
标准兼容. Wasmtime通过了官方WebAssembly测试套件,实现了官方wasm C API,并实现了WebAssembly的未来提案。Wasmtime的开发人员在整个过程中也密切参与WebAssembly标准流程。
示例
使用Wasmtime嵌入API运行小型WebAssembly模块的示例可能如下所示
use anyhow::Result;
use wasmtime::*;
fn main() -> Result<()> {
// Modules can be compiled through either the text or binary format
let engine = Engine::default();
let wat = r#"
(module
(import "host" "host_func" (func $host_hello (param i32)))
(func (export "hello")
i32.const 3
call $host_hello)
)
"#;
let module = Module::new(&engine, wat)?;
// Create a `Linker` which will be later used to instantiate this module.
// Host functionality is defined by name within the `Linker`.
let mut linker = Linker::new(&engine);
linker.func_wrap("host", "host_func", |caller: Caller<'_, u32>, param: i32| {
println!("Got {} from WebAssembly", param);
println!("my host state is: {}", caller.data());
})?;
// All wasm objects operate within the context of a "store". Each
// `Store` has a type parameter to store host-specific data, which in
// this case we're using `4` for.
let mut store = Store::new(&engine, 4);
let instance = linker.instantiate(&mut store, &module)?;
let hello = instance.get_typed_func::<(), ()>(&mut store, "hello")?;
// And finally we can call the wasm!
hello.call(&mut store, ())?;
Ok(())
}
更多示例和信息可以在wasmtime
crate的在线文档中找到。
文档
wasmtime指南是了解Wasmtime能为您做什么或回答您关于Wasmtime的疑问的最佳起点。如果您想为Wasmtime做出贡献,它也可以帮助您做到这一点!
依赖项
~8–23MB
~376K SLoC