mot*_*son 6 rust webassembly rust-no-std
我正在开发一个旨在编译为 WebAssembly 的项目。所以我想我必须将库标记为 no_std。但由于它目前很大程度上依赖于 Vec、String 和 HashSet,这似乎是不可能的,因为我在这些功能上遇到了错误。
如何删除/替换这些功能而不丢失像 webassemble 这样的 no_std 环境中的功能。我想我可以选择 &str 而不是 String,但是其他的呢?
如果我删除#![cfg_attr(not(test), no_std)]并编译该项目,它似乎可以作为 WebAssembly 二进制文件工作。如果我在添加行时出现错误,这是为什么?
bk2*_*204 12
正如评论中所提到的,您不需要将自己限制在no_stdWASM 中,因为许多标准库都是可用的,包括这两个集合。
但是,如果您在真实no_std环境中进行构建,则可以使用Vec提供的alloccrate,它允许您分配内存。 String同样可用。在大多数情况下,您将有一些可用的内存分配,因此这alloc是一个选项。
您不能在环境中使用HashMap或,因为为了避免哈希冲突攻击,它们需要访问安全的随机数据源。即使环境也可能处理不受信任的数据,因此保持这种安全不变性很重要。在那里,您可以使用和来代替(也来自),它们提供类似的功能,但性能特征略有不同,对相关数据的要求也略有不同。由于这些集合是确定性的,因此无需内存分配器即可实现它们。HashSetno_stdno_stdBTreeMapBTreeSetalloc