Crates.io | supply-chain-trust-example-crate-000085 |
lib.rs | supply-chain-trust-example-crate-000085 |
version | 1.8.0 |
source | src |
created_at | 2024-11-04 02:22:36.809234 |
updated_at | 2024-11-04 02:22:36.809234 |
description | `tinyvec` provides 100% safe vec-like data structures. |
homepage | |
repository | |
max_upload_size | |
id | 1434473 |
size | 391,198 |
A 100% safe crate of vec-like types.
Not just safe at the public API boundary, fully safe for all internal code too: #![forbid(unsafe_code)]
The provided types are as follows:
ArrayVec
is an array-backed vec-like data structure. It panics on overflow.SliceVec
is similar, but using a &mut [T]
as the data backing.TinyVec
(alloc
feature) is an enum that's either an Inline(ArrayVec)
or a Heap(Vec)
.
If a TinyVec
is Inline
and would overflow its array it automatically transitions to Heap
and continues whatever it was doing.To attain this "100% safe code" status there is one compromise: the element type of the vecs must implement Default
.
For more API details, please see the docs.rs documentation
tinyvec
Alternatives?Maybe you don't want to use tinyvec
, there's other crates you might use instead!
The main difference is that both of those crates use unsafe
code.
This mostly allows them to get rid of the Default
limitation for elements that tinyvec
imposes.
The smallvec
and arrayvec
crates are generally correct, but there's been occasional bugs leading to UB.
With tinyvec
, any uncaught bugs can't lead to UB, because the crate is safe code all the way through.
If you want that absolute level of assurance against UB, use tinyvec
.