这是关于使用 Rust 和 WebAssembly 的未发布文档,已发布的文档可在 Rust 和 WebAssembly 主文档站点上找到 。此处记录的功能可能在 Rust 和 WebAssembly 工具的发布版本中不可用。

哪些箱子可以直接与 WebAssembly 一起使用?

最简单的方法是列出目前不能与 WebAssembly 一起使用的部分;避免这些部分的箱子通常可以移植到 WebAssembly,并且通常可以正常工作。一个好的经验法则是,如果一个箱子支持嵌入式和#![no_std]使用,它可能也支持 WebAssembly。

箱子可能做的一些不能与 WebAssembly 一起使用的事情

C 和系统库依赖项

wasm 中没有系统库,因此任何尝试绑定到系统库的箱子都无法工作。

使用 C 库也可能无法正常工作,因为 wasm 没有跨语言通信的稳定 ABI,并且 wasm 的跨语言链接非常挑剔。每个人都希望这最终能正常工作,尤其是现在clang默认情况下提供他们的wasm32目标,但目前还没有实现。

文件 I/O

WebAssembly 无法访问文件系统,因此假设存在文件系统(并且没有 wasm 特定的解决方法)的箱子将无法工作。

生成线程

计划将线程添加到 WebAssembly,但尚未发布。尝试在wasm32-unknown-unknown目标上生成线程将导致恐慌,从而触发 wasm 陷阱。

那么哪些通用箱子可以直接与 WebAssembly 一起使用?

算法和数据结构

提供特定算法数据结构实现的箱子,例如 A* 图搜索或伸展树,通常可以与 WebAssembly 一起使用。

#![no_std]

不依赖标准库的箱子通常可以与 WebAssembly 一起使用。

解析器

解析器 - 只要它们只是接收输入而不执行自己的 I/O - 通常可以与 WebAssembly 一起使用。

文本处理

处理以文本形式表达的人类语言复杂性的箱子通常可以与 WebAssembly 一起使用。

Rust 模式

针对 Rust 编程的特定情况的共享解决方案通常可以与 WebAssembly 一起使用。