有哪些 Crates 现在就能为 WebAssembly 工作?

最容易列出的事情,正是目前使用 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目标的一个线程上派生会引起恐慌,这会触发一个 wasm 陷阱。

所以,要 Crates 现在就能为 WebAssembly 工作,有那些常用方式?

算法和数据结构

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

#![no_std]

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

Parsers(解析器)

Parsers -只要他们只是接受输入,并且不执行他们自己的 I/O。往往也适用于 WebAssembly。

Text Processing(文本处理中)

当 要文本形态的明确性,处理人类语言的复杂方面的 Crates ,往往也适用于 WebAssembly。

Rust Patterns(Rust 模式)

分享 在 Rust 编程环境下,特定情况的解决方案,往往也适用于 WebAssembly。