[][src]Crate alloc_wg

An attempt to collect several proposals of rust-lang/wg-allocators into a MVP.

Changes regarding the current Alloc trait

  • The first thing to notice is, that Alloc was renamed to AllocRef in 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 on WG repository: rust-lang/wg-allocators#8

  • AllocRef was split up into AllocRef, DeallocRef, and ReallocRef to 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 how BuildHasher is related to Hasher. 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 the AllocRef into 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. If an allocation can fail, only a try_*_in method may be available. To maintain backwards compatibility, AbortAlloc was introduced. AbortAlloc wraps another allocator, but aborts on OOM thus AbortAlloc<Global> may be used as default allocator for Box or Vec. To realize this, AbortAlloc implements AllocRef<Error=!>.

    Issue: rust-lang/wg-allocators#23

  • The new layout type NonZeroLayout was introduced. Currently, implementors of Alloc can 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 removes unsafe from AllocRef::alloc and AllocRef::alloc_zeroed, and unlocks the possibility to move the extension API like alloc_array into a separate trait.

    Issue: rust-lang/wg-allocators#16

  • Support reallocating to a different alignment.

    Issue: rust-lang/wg-allocators#5



A pointer type for heap allocation.




An extension trait for Option<T> providing unchecked unwrapping.


An extension trait for Result<T, E> providing unchecked unwrapping.

Type Definitions