align_constr

Crates.ioalign_constr
lib.rsalign_constr
version0.2.0
sourcesrc
created_at2022-02-26 18:43:00.737136
updated_at2023-12-25 00:33:33.651844
descriptionLike `aligned` but better. Newtype whose alignment is constrained not only by the inherent alignment requirements of the underlying type but also by the alignment requirements of the "alignment constraint archetype"
homepage
repositoryhttps://github.com/JohnScience/align_constr
max_upload_size
id540076
size23,488
Dmitrii - Demenev (JohnScience)

documentation

https://docs.rs/align_constr

README

Alignment-constrained newtype

crates.io crates.io

Newtype whose alignment is constrained not only by the inherent alignment requirements of the underlying type but also by the alignment requirements of the "alignment constraint archetype". Within this context, "alignment constraint archetype" AlignConstrArchetype is a type whose alignment constraint is imposed on the underlying type T to produce AlignConstr<T, AlignConstrArchetype>.

Notes

Resources on alignment

  • "Data Alignment", personal website of Song Ho Ahn - a professor in the Computer Science department at Sheridan College (Oakville)

Not so visually appealing yet incredibly well written article that explains not only what alignment is but also why it exists and where one might need to overalign data.

Dmitrii Demenev

Rather deep exploration of the topic from the point of view of a C programming expert. The article covers not only the information about alignment but also related related topics as applied to C, as well as sever other programming languages, including Rust.

Dmitrii Demenev

Example

use align_constr::{AlignConstr, n_zst::ZST128};

let overaligned_u8 = AlignConstr::<u8, ZST128>::new(3);
assert!(overaligned_u8.value == 3);
// requires non-const context
assert!(&overaligned_u8 as *const _ as usize % 128 == 0);

align_constr vs aligned

aligned is a popular library that served as a prototype for align_constr. At the time of writing, align_constr is featurewise and idiomatically superior and provides not only more extensive documentation but also a selection of resources on the subject. To pay respect to the contributors of aligned crate, the quality of their creation's CI is still unmatched by align_constr. However, the limited scope of both libraries nonetheless makes align_constr arguably better for any use case.

Note: Unlike in aligned, the dependency on as_slice is optional.

About align_constr

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Commit count: 34

cargo fmt