[][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 a Builder: BuildAlloc. 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

Modules

alloc
boxed

A pointer type for heap allocation.

collections

Traits

UncheckedOptionExt

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

UncheckedResultExt

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

Type Definitions

Never