【发布时间】:2021-04-04 18:12:19
【问题描述】:
我正在开发一个旨在编译为 webassembly 的项目。所以我想我必须将库标记为 no_std。但由于它目前大量依赖 Vec、String 和 HashSet,这似乎是不可能的,因为我在这些功能上遇到了错误。
如何在不丢失 no_std 环境(如 webassembly)中的功能的情况下删除/替换这些功能。我想我可以选择 &str 而不是 String,但是其他的呢?
如果我删除 #![cfg_attr(not(test), no_std)] 并编译项目,它似乎可以作为 webassembly 二进制文件工作。如果我在添加行时出错,这是为什么呢?
【问题讨论】:
-
编译成webassembly不需要
no_std -
哦!我认为 wasm 是一个 no_std 环境。我在其他所有关于 wasm 的帖子中都看到了 no_std,所以这就是我这么认为的原因。 rustwasm.github.io/docs/book/reference/… 说:例如
A good rule of thumb is that if a crate supports embedded and #![no_std] usage, it probably also supports WebAssembly.。 -
wasm32-unknown-unknown目标确实有可用的stdcrate,但并非所有部分都已实现。 (你可以在 Rust 源代码中看到这个 here。)例如,如果你尝试在 WebAssembly 中使用std::fs或std::net,你的代码可能会出现恐慌或返回错误。但是像Vec和HashMap这样的东西应该没有问题。 -
太棒了!那么这就解释了! :) 谢谢!有什么理由尝试在 wasm 中保留 no_std 吗?
标签: rust webassembly rust-no-std