哪些箱子可以直接与 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 一起使用。