可以与 WebAssembly 一起使用的 crates

最容易列出当前不适用于WebAssembly的内容; 避免这些东西的箱,是可以移植到 WebAssembly 的 ,但通常只能到及格线。 一个好的经验法则是,如果一个箱支持嵌入式和 #![no_std] 用法,它极可能也支持 WebAssembly。

一个 Crate 最可能会的事情,就是不能与 WebAssembly 一起工作

C 和 系统库依赖项

wasm 中没有系统库,因此任何 crate 尝试到系统库的绑定,都不起作用。

使用 C 库也可能无法工作,因为 wasm 没有用于跨语言通信的稳定 ABI,并且 wasm 的跨语言链接非常挑剔。 每个人都希望这些基础建设最终能够建成,尤其是 clang,也正在运送他们的 wasm32 目标,现在开始为默认设置,但 “故事” 还没有完成而已。

File I/O

WebAssembly 无权访问文件系统,因此假设存在文件系统 — 并且没有 wasm 特定的解决方法 — 不可用。

派生线程

计划向 WebAssembly 添加线程 ,但尚未开始。 若试图在 wasm32-unknown-unknown 目标的一个线程上派生会引起 panic,这会触发一个 wasm 陷阱。

所以,可以与 WebAssembly 一起使用的 crates,通常都是哪些?

算法和数据结构

提供一个特定 算法 实现或 数据结构 的 crates 例如, A* 图搜索或 splay 树,往往也适用于 WebAssembly。

#![no_std]

不依靠标准库的 Crates ,往往也适用于 WebAssembly。

Parsers

Parsers — 只要它们只接受输入,不执行自己的I/O,就可以很好地使用 WebAssembly。

Text Processing

以文本形式表达时处理人类语言复杂性的 crate 可以很好地与 WebAssembly 一起工作。

Rust Patterns

对于 特定于 Rust 中编程的特定情况,共享解决方案 往往可以很好地与WebAssembly一起使用。