Releases: Rust-for-Linux/pin-init
Releases · Rust-for-Linux/pin-init
v0.0.10
Added
Wrapper<T>
trait added for creating wrapper structs with a structurally pinned value.MaybeZeroable
derive macro to try to deriveZeroable
, but not error if not all fields
implement it.unsafe fn cast_[pin_]init()
functions to unsafely change the initialized type of an initializerimpl<T, E> [Pin]Init<T, E> for Result<T, E>
, so results are now (pin-)initializers- add
Zeroable::init_zeroed()
delegating toinit_zeroed()
- add new
zeroed()
, a safe version ofmem::zeroed()
and also provide it viaZeroable::zeroed()
- implement
Zeroable
forOption<&T>
andOption<&mut T>
- implement
Zeroable
forOption<[unsafe] [extern "abi"] fn(...args...) -> ret>
for"Rust"
and
"C"
ABIs and up to 20 arguments
Changed
InPlaceInit
now only exists when thealloc
orstd
features are enabled- added support for visibility in
Zeroable
derive macro - added support for
union
s inZeroable
derive macro - renamed the crate from
pinned-init
topin-init
andpinned-init-macro
topin-init-internal
- blanket impls of
Init
andPinInit
fromimpl<T, E> [Pin]Init<T, E> for T
to
impl<T> [Pin]Init<T> for T
- renamed
zeroed()
toinit_zeroed()
Fixed
-
Zeroable
implementation forOption<Box<T>>
&Option<NonNull<T>>
to only allowT: Sized
(soundness issue)Full changes: v0.0.9...v0.0.10
v0.0.9
Added
InPlaceWrite
trait to re-initialize already existing allocations,assert_pinned!
macro to check if a field is marked with#[pin]
,- compatibility with stable Rust, thanks a lot to @bonzini! #24 and #23:
- the
alloc
feature enables support forallocator_api
and reflects the old behavior, if it is
disabled, then infallible allocations are assumed (just like the standard library does).
- the
Fixed
- guard hygiene wrt constants in
[try_][pin_]init!
Full changes: v0.0.8...v0.0.9
v0.0.8
Changed
- return type of
zeroed()
fromimpl Init<T, E>
toimpl Init<T>
(also removing the generic
parameterE
) - removed the default error of
try_[pin_]init!
, now you always have to specify an error using
? Error
at the end - put
InPlaceInit
behind thealloc
feature flag, this allows stable usage of the#![no_std]
part of the crate
Full changes: v0.0.7...v0.0.8
v0.0.7
Added
Zeroable
derive macro..Zeroable::zeroed()
tail expression support in[try_][pin_]init!
macros: allowed to omit
fields, omitted fields are initialized with0
[pin_]chain
functions to modify a value after an initializer has run[pin_]init_array_from_fn
to createimpl [Pin]Init<[T; N], E>
from a generator closure
fn(usize) -> impl [Pin]Init<T, E>
impl Zeroable for UnsafeCell
Changed
PinInit
is now a supertrait ofInit
(before there was a blanket impl)
Removed
- coverage workflow and usage of
#[feature(no_coverage)]
impl Zeroable for Infallible
(see Security)
Fixed
Self
in generic bounds on structs with#[pin_data]
- const generic default parameter values can now be used on structs with
#[pin_data]
Security
impl Zeroable for Infallible
(#13) it was possible to trigger UB by creating a value of type
Box<Infallible>
viaBox::init(zeroed())
Full Changes: v0.0.6...v0.0.7