mirror of
https://github.com/Lokathor/bytemuck.git
synced 2024-10-30 05:40:50 +00:00
8.2 KiB
8.2 KiB
bytemuck
changelog
1.9.1
- Bumped the minimum
bytemuck_derive
dependency version from1.0
to1.1
. The fact thatbytemuck
andbytemuck_derive
are separate crates at all is an unfortunate technical limit of current Rust, woe and calamity.
1.9.0
- fu5ha added the
NoUninit
,AnyBitPattern
, andCheckedBitPattern
traits. This allows for a more fine-grained level of detail in what casting operations are allowed for a type. Types that already implementZeroable
andPod
will have a blanket impl for these new traits. This is a "preview" of the direction that the crate will probably go in the eventual 2.0 version. We're still waiting on Project Safe Transmute for an actual 2.0 version of the crate, but until then please enjoy this preview. - Also Fusha added better support for
union
types in the derive macros. I still don't know how any of the proc-macro stuff works at all, so please direct questions to her.
1.8.0
try_pod_read_unaligned
andpod_read_unaligned
let you go from&[u8]
toT:Pod
without worrying about alignment.
1.7.3
- Experimental support for the
portable_simd
language extension under thenightly_portable_simd
cargo feature. As the name implies, this is an experimental crate feature and it's not part of the semver contract. All it does is add the appropriateZeroable
andPod
impls.
1.7.2
- Why does this repo keep being hit with publishing problems? What did I do to deserve this curse, Ferris? This doesn't ever happen with tinyvec or fermium, only bytemuck.
1.7.1
- Soundness Fix: The wrap/peel methods for owned value conversion, added to
TransparentWrapper
in 1.6, can cause a double-drop if used with types that implDrop
. The fix was simply to add aManuallyDrop
layer around the value before doing thetransmute_copy
that is used to wrap/peel. While this fix could technically be backported to the 1.6 series, since 1.7 is semver compatible anyway the 1.6 series has simply been yanked.
1.7
- In response to Unsafe Code Guidelines Issue
#286, this
version of Bytemuck has a Soundness-Required Breaking Change. This is
"allowed" under Rust's backwards-compatibility guidelines, but it's still
annoying of course so we're trying to keep the damage minimal.
- The Reason: It turns out that pointer values should not have been
Pod
. More specifically,ptr as usize
is not the same operation as callingtransmute::<_, usize>(ptr)
. - LLVM has yet to fully sort out their story, but until they do, transmuting pointers can cause miscompilations. They may fix things up in the future, but we're not gonna just wait and have broken code in the mean time.
- The Fix: The breaking change is that the
Pod
impls for*const T
,*mut T
, andOption<NonNull<T>
are now gated behind theunsound_ptr_pod_impl
feature, which is off by default. - You are strongly discouraged from using this feature, but if a dependency of yours doesn't work when you upgrade to 1.7 because it relied on pointer casting, then you might wish to temporarily enable the feature just to get that dependency to build. Enabled features are global across all users of a given semver compatible version, so if you enable the feature in your own crate, your dependency will also end up getting the feature too, and then it'll be able to compile.
- Please move away from using this feature as soon as you can. Consider it to already be deprecated.
- PR 65
- The Reason: It turns out that pointer values should not have been
1.6.3
- Small goof with an errant
;
, so PR 69 actually got things working on SPIR-V.
1.6.2
cargo upload goof! ignore this one.
1.6.1
1.6
- The
TransparentWrapper
trait now has more methods. More ways to wrap, and now you can "peel" too! Note that we don't call it "unwrap" because that name is too strongly associated with the Option/Result methods. Thanks to LU15W1R7H for doing PR 58 - Min Const Generics! Now there's Pod and Zeroable for arrays of any size when
you turn on the
min_const_generics
crate feature. zakarumych got the work started in PR 59, and chorman0773 finished off the task in PR 63
1.5.1
- Fix
bytes_of
failing on zero sized types. PR 53
1.5
- Added
pod_collect_to_vec
, which will gather a slice into a vec, allowing you to change the pod type while also safely ignoring alignment. PR 50
1.4.2
- Kimundi fixed an issue that could make
try_zeroed_box
stack overflow for large values at low optimization levels. PR 43
1.4.1
1.4
- icewind1991 has contributed the proc-macros
for deriving impls of
Pod
,TransparentWrapper
,Zeroable
!! Everyone has been waiting for this one folks! It's a big deal. Just enable thederive
cargo feature and then you'll be able to derive the traits on your types. It generates all the appropriate tests for you. - The
zeroable_maybe_uninit
feature now adds aZeroable
impl to theMaybeUninit
type. This is only behind a feature flag becauseMaybeUninit
didn't exist back in1.34.0
(the minimum rust version ofbytemuck
).
1.3.1
- The entire crate is now available under the
Apache-2.0 OR MIT
license as well as the previousZlib
license #24. - HeroicKatora added the
try_zeroed_slice_box
function #10.zeroed_slice_box
is also available. - The
offset_of!
macro now supports a 2-arg version. For types that impl Default, it'll just make an instance usingdefault
and then call over to the 3-arg version. - The
PodCastError
type now supportsHash
andDisplay
. Also if you enable theextern_crate_std
feature then it will supportstd::error::Error
. - We now provide a
TransparentWrapper<T>
impl forcore::num::Wrapper<T>
. - The error type of
try_from_bytes
andtry_from_bytes_mut
when the input isn't aligned has been corrected from beingAlignmentMismatch
(intended for allocation casting only) toTargetAlignmentGreaterAndInputNotAligned
.
1.3.0
- Had a bug because the CI was messed up! It wasn't soundness related, because
it prevented the crate from building entirely if the
extern_crate_alloc
feature was used. Still, this is yanked, sorry.
1.2.0
- thomcc added many things:
- A fully sound
offset_of!
macro #10 - A
Contiguous
trait for when you've got enums with declared values all in a row #12 - A
TransparentWrapper
marker trait for when you want to more clearly enable adding and removing a wrapper struct to its inner value #15 - Now MIRI is run on CI in every single push! #16
- A fully sound
1.1.0
- SimonSapin added
from_bytes
,from_bytes_mut
,try_from_bytes
, andtry_from_bytes_mut
(PR Link)
1.0.1
- Changed to the zlib license.
- Added much more proper documentation.
- Reduced the minimum Rust version to 1.34