#backward #compatibility #stable #friends #guarantees #bool #copy-clone

maybe-uninit

MaybeUninit for friends of backwards compatibility

2 stable releases

Uses old Rust 2015

2.0.0 Jul 10, 2019
1.0.0 Jul 9, 2019

#1044 in Rust patterns

Download history 117576/week @ 2024-03-14 107120/week @ 2024-03-21 129863/week @ 2024-03-28 101481/week @ 2024-04-04 106529/week @ 2024-04-11 109251/week @ 2024-04-18 105040/week @ 2024-04-25 96986/week @ 2024-05-02 110386/week @ 2024-05-09 116703/week @ 2024-05-16 103168/week @ 2024-05-23 113371/week @ 2024-05-30 120752/week @ 2024-06-06 106609/week @ 2024-06-13 114146/week @ 2024-06-20 84438/week @ 2024-06-27

450,604 downloads per month
Used in 3,667 crates (2 directly)

Apache-2.0 OR MIT

26KB
94 lines

maybe-uninit

Quite often, uses of std::mem::uninitialized() end up in unsound code. Therefore, the MaybeUninit union has been added to std::mem and std::mem::uninitialized() is being deprecated. However, MaybeUninit has been added quite recently. Sometimes you might want to support older versions of Rust as well. Here is where maybe-uninit comes in: it supports stable Rust versions starting with 1.20.0.

Sadly, a feature-complete implementation of MaybeUninit is not possible on stable Rust. Therefore, the library offers the guarantees of MaybeUninit in a staged fashion:

  • Rust 1.36.0 onward: MaybeUninit implementation of Rust stable is being re-exported

  • Rust 1.22.x - 1.35.0: No panicing on uninhabited types, unsoundness when used with types like bool or enums. However, there is protection from accidentially Droping e.g. during unwind!

  • Rust 1.20.x - 1.21.x: No support for Copy/Clone of MaybeUninit<T>, even if T impls Copy or even Clone.

No runtime deps