/// Marker trait for "plain old data". /// /// The point of this trait is that once something is marked "plain old data" /// you can really go to town with the bit fiddling and bit casting. Therefore, /// it's a relatively strong claim to make about a type. Do not add this to your /// type casually. /// /// **Reminder:** The results of casting around bytes between data types are /// _endian dependant_. Little-endian machines are the most common, but /// big-endian machines do exist (and big-endian is also used for "network /// order" bytes). /// /// ## Safety /// /// * The type must be inhabited (eg: no /// [Infallible](core::convert::Infallible)). /// * The type must allow any bit pattern (eg: no `bool` or `char`, which have /// illegal bit patterns). /// * The type must not contain any uninit (or padding) bytes, either in the /// middle or on the end (eg: no `#[repr(C)] struct Foo(u8, u16)`, which has /// padding in the middle, and also no `#[repr(C)] struct Foo(u16, u8)`, which /// has padding on the end). /// * The type needs to have all fields also be `Pod`. /// * The type needs to be `repr(C)` or `repr(transparent)`. In the case of /// `repr(C)`, the `packed` and `align` repr modifiers can be used as long as /// all other rules end up being followed. /// * It is disallowed for types to contain pointer types, `Cell`, `UnsafeCell`, /// atomics, and any other forms of interior mutability. /// * More precisely: A shared reference to the type must allow reads, and /// *only* reads. RustBelt's separation logic is based on the notion that a /// type is allowed to define a sharing predicate, its own invariant that must /// hold for shared references, and this predicate is the reasoning that allow /// it to deal with atomic and cells etc. We require the sharing predicate to /// be trivial and permit only read-only access. pubunsafetrait Pod: Zeroable + Copy + 'static {}
unsafeimpl Pod for () {} unsafeimpl Pod for u8 {} unsafeimpl Pod for i8 {} unsafeimpl Pod for u16 {} unsafeimpl Pod for i16 {} unsafeimpl Pod for u32 {} unsafeimpl Pod for i32 {} unsafeimpl Pod for u64 {} unsafeimpl Pod for i64 {} unsafeimpl Pod for usize {} unsafeimpl Pod for isize {} unsafeimpl Pod for u128 {} unsafeimpl Pod for i128 {} #[cfg(feature = "nightly_float")] unsafeimpl Pod for f16 {} unsafeimpl Pod for f32 {} unsafeimpl Pod for f64 {} #[cfg(feature = "nightly_float")] unsafeimpl Pod for f128 {} unsafeimpl<T: Pod> Pod for Wrapping<T> {}
#[cfg(feature = "pod_saturating")] unsafeimpl<T: Pod> Pod for core::num::Saturating<T>{}
#[cfg(feature = "unsound_ptr_pod_impl")] #[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "unsound_ptr_pod_impl"))
)] unsafeimpl<T: 'static> Pod for *mut T {} #[cfg(feature = "unsound_ptr_pod_impl")] #[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "unsound_ptr_pod_impl"))
)] unsafeimpl<T: 'static> Pod for *const T {} #[cfg(feature = "unsound_ptr_pod_impl")] #[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "unsound_ptr_pod_impl"))
)] unsafeimpl<T: 'static> PodInOption for NonNull<T> {}
unsafeimpl<T: ?Sized + 'static> Pod for PhantomData<T> {} unsafeimpl Pod for PhantomPinned {} unsafeimpl<T: Pod> Pod for core::mem::ManuallyDrop<T> {}
// Note(Lokathor): MaybeUninit can NEVER be Pod.
#[cfg(feature = "min_const_generics")] #[cfg_attr(feature = "nightly_docs", doc(cfg(feature = "min_const_generics")))] unsafeimpl<T, const N: usize> Pod for [T; N] where T: Pod {}
impl_unsafe_marker_for_simd!( #[cfg(target_arch = "x86")] unsafeimpl Pod for x86::{
__m128i, __m128, __m128d,
__m256i, __m256, __m256d,
}
);
impl_unsafe_marker_for_simd!( #[cfg(target_arch = "x86_64")] unsafeimpl Pod for x86_64::{
__m128i, __m128, __m128d,
__m256i, __m256, __m256d,
}
);
#[cfg(feature = "nightly_portable_simd")] #[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "nightly_portable_simd"))
)] unsafeimpl<T, const N: usize> Pod for core::simd::Simd<T, N> where
T: core::simd::SimdElement + Pod,
core::simd::LaneCount<N>: core::simd::SupportedLaneCount,
{
}
impl_unsafe_marker_for_simd!( #[cfg(all(target_arch = "x86", any(feature = "nightly_stdsimd", feature = "avx512_simd")))] unsafeimpl Pod for x86::{
__m512, __m512d, __m512i
}
);
impl_unsafe_marker_for_simd!( #[cfg(all(target_arch = "x86_64", any(feature = "nightly_stdsimd", feature = "avx512_simd")))] unsafeimpl Pod for x86_64::{
__m512, __m512d, __m512i
}
);
impl_unsafe_marker_for_simd!( #[cfg(all(target_arch = "x86", feature = "nightly_stdsimd"))] unsafeimpl Pod for x86::{
__m128bh, __m256bh, __m512bh
}
);
impl_unsafe_marker_for_simd!( #[cfg(all(target_arch = "x86_64", feature = "nightly_stdsimd"))] unsafeimpl Pod for x86_64::{
__m128bh, __m256bh, __m512bh
}
);
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.10Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-10-12)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.