4 releases (breaking)

0.4.0 Aug 25, 2022
0.3.0 Aug 25, 2022
0.2.0 Aug 25, 2022
0.1.0 Aug 24, 2022

#1544 in Data structures

Download history 30005/week @ 2023-12-10 25407/week @ 2023-12-17 11501/week @ 2023-12-24 18679/week @ 2023-12-31 28108/week @ 2024-01-07 34898/week @ 2024-01-14 36140/week @ 2024-01-21 44670/week @ 2024-01-28 39690/week @ 2024-02-04 43837/week @ 2024-02-11 43597/week @ 2024-02-18 42852/week @ 2024-02-25 38881/week @ 2024-03-03 41781/week @ 2024-03-10 44612/week @ 2024-03-17 44881/week @ 2024-03-24

171,934 downloads per month
Used in 145 crates (via wasmparser-nostd)

Apache-2.0

47KB
1K SLoC

indexmap-nostd

A no_std compatible indexmap crate (re)implementation.

Note: The indexmap crate already supports to be compiled in no_std environments and it uses hashbrown crate's HashMap under the hood which still requires some sort of randomized initialization. However, some embedded platforms simply cannot provide ways to randomly seed hash maps and similar data structures making code that depends on it susceptible to users (or attackers) that control inputs to those hash maps.

Therefore indexmap-nostd is a (re)implementation of the indexmap crate that replaces the internal use of HashMap with BTreeMap.

Advantages

This crate and its data structures can be used in any embedded no_std environment without the need to provide random seeds for HashMap initialization.

Disadvantages

  • The current implementation of indexmap-nostd focuses on being easy to maintain simple code which trades off efficiency compared to the original indexmap crate. An example of performance regression is that now inserted keys are duplicated.
  • Due to the above point some methods now require additional where bounds. For example IndexMap::insert now requires K: Clone.
  • We are primarily interested in getting this no_std compatible implementation to be working for the wasmparser crate. This means that we primarily provide a subset of the features and API of the original indexmap crate and might not be interested in adding features that we do not need for this use case that are also hard to implement or maintain.

Dependencies

~175KB