#collection #nightly #allocator #storage #storage-api

nightly no-std department

Implementation of the proposed Storages API

10 releases

0.2.6 Sep 8, 2024
0.2.5 Jun 13, 2022
0.1.2 Aug 27, 2021

#52 in No standard library

MIT/Apache

170KB
4K SLoC

Department

crates.io Documentation MIT/Apache-2 licensed

A Rust library hosting a possible implementation of the proposed Storages API, as well as several of the standard std collections implemented with it.

Inspired by storage-poc, re-implemented and built upon to provide (hopefully) release-ready functionality.

Features

By default, all features are turned on - but they can be disabled if you only want specific storages and collections

  • std: Whether to include std error support and other std-only features
  • all_storages: Enable all storage features
    • inline: Inline on-the-stack storages
    • heap: Virtual heap-like storage, can be used on the stack or in a static
    • static: Storages backed by static memory, stored in the binary
    • alloc: Storages backed by a standard allocator. Requires the alloc crate to be available
    • fallback: Storage which attempts to store something in one, then falls back to a second storage
    • debug: Storage which wraps another, and provides a number of runtime checks which panic on certain forms of UB or incorrect usages.
  • all_collections: Enable all collection types
    • box: Include the Box type
    • rc: Include the Rc and Weak types
    • vec: Include the Vec type
    • string: Include the String type, requires vec

Future Work

In the future, more types of storages and collections need to be added, hopefully up to std parity. Tests should be added for all storage types, with coverage for most edge cases (ZST, alignment requirements, etc).

Missing Collections

  • btree, an implementation of a BTreeMap and BTreeSet
  • hash, an implementation of a HashMap and HashSet
  • arc, implementation for atomically ref-counted items
  • os/path, implementations of OsString and PathBuf

Dependencies

~150KB