4 个版本 (重大变更)
0.4.0 | 2022 年 8 月 25 日 |
---|---|
0.3.0 | 2022 年 8 月 25 日 |
0.2.0 | 2022 年 8 月 25 日 |
0.1.0 | 2022 年 8 月 24 日 |
#1321 在 数据结构 中
每月 222,411 次下载
在 182 个 crate 中使用 (直接使用 2 个)
47KB
1K SLoC
indexmap-nostd
兼容 no_std 的 indexmap
crate (重新)实现。
注意: indexmap
crate 已支持在 no_std
环境下编译,并且它底层使用 hashbrown
crate 的 HashMap
,这仍然需要某种随机初始化。然而,一些嵌入式平台根本无法提供随机初始化哈希表和类似数据结构的方法,这使得依赖于这些哈希表的代码容易受到控制输入的用户(或攻击者)的影响。
因此,indexmap-nostd
是 indexmap
crate 的 (重新)实现,它将内部对 HashMap
的使用替换为 BTreeMap
。
优点
此 crate 及其数据结构可用于任何嵌入式 no_std
环境,无需为 HashMap
初始化提供随机种子。
缺点
- 当前
indexmap-nostd
的实现侧重于易于维护的简单代码,这与原始的indexmap
crate 相比效率较低。性能退化的一个例子是现在插入的键被重复了。 - 由于上述原因,某些方法现在需要额外的 where 约束。例如,现在
IndexMap::insert
需要K: Clone
。 - 我们主要关注的是使这个与
no_std
兼容的实现能够为wasmparser
软件包工作。这意味着我们主要提供原始indexmap
软件包的功能和API的一个子集,可能不会添加我们不需要且实现或维护难度较大的功能。
依赖项
~185KB