Crates.io | maybe-uninit |
lib.rs | maybe-uninit |
version | 2.0.0 |
source | src |
created_at | 2019-07-09 02:54:23.855805 |
updated_at | 2019-07-10 13:41:31.04347 |
description | MaybeUninit for friends of backwards compatibility |
homepage | |
repository | https://github.com/est31/maybe-uninit |
max_upload_size | |
id | 147730 |
size | 38,490 |
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 Drop
ing 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
.