This vendors this revision:
8986582d37
It also makes some desktop fixes due to some breaking changes in Suggest, which
@daisuke previously reviewed. It's a large vendor due to vendoring some new
crates plus some app-services revisions that made changes to logging and error
reporting and touched lots of files.
Differential Revision: https://phabricator.services.mozilla.com/D250877
tinyvec
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:
ArrayVecis an array-backed vec-like data structure. It panics on overflow.SliceVecis similar, but using a&mut [T]as the data backing.TinyVec(allocfeature) is an enum that's either anInline(ArrayVec)or aHeap(Vec). If aTinyVecisInlineand would overflow its array it automatically transitions toHeapand 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!
- arrayvec is a crate with array-backed structures.
- smallvec is a crate where the array-backed data can be moved to the heap on overflow.
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.