可以与 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一起使用。