An attempt to collect several proposals of rust-lang/wg-allocators into a MVP.
This crate is WIP, requires a nightly compiler, and is designed to replace the alloc crate. However, this is not completely possible as crate, as some compiler features are not possible for crates.
-
The first thing to notice is, that
Allocwas renamed toAllocRefin order to show that they are typically implemented for a reference or smart pointer or ZST, not directly for the type that actually holds the allocator’s state.Issue: rust-lang/wg-allocators#8
-
AllocRefwas split up intoAllocRef,DeallocRef, andReallocRefto make more flexible allocators possible.Issue: rust-lang/wg-allocators#9
-
The allocators has to be associated with
BuildAllocRef. It is related to the allocator traits similar howBuildHasheris related toHasher. Although the signatures are different, it makes an even more flexible allocator design possible.Issue: rust-lang/wg-allocators#12
-
Added an associative error type to
AllocRef. Besides adding the possibility of returning additional information on allocation failure, it's also possible to split the usage of theAllocRefinto a fallible and an infallible case. Personally I think this is a pretty big deal, as kernel programmer can rely on allocation, which will never fail.Issue: rust-lang/wg-allocators#23
-
The new layout type
NonZeroLayoutwas introduced. Currently, implementors ofAlloccan chose to allow zero-sized allocation so in a generic context it's impossible to rely on this, so banning zero-sized allocation is a possible step to prevent this. This also removesunsafefromAllocRef::allocandAllocRef::alloc_zeroed, and unlocks the possibility to move the extension API likealloc_arrayinto a separate trait.Issue: rust-lang/wg-allocators#16
-
Support reallocating to a different alignment.
Issue: rust-lang/wg-allocators#5
-
Boxstruct- specialization of sized iterators as it's not possible for downstream crates.
- Limited
T: CopyforFn-traits as it's not possible for downstream crates.
Alloc-WG is distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See LICENSE-APACHE and LICENSE-MIT for details.