alloc-wg 0.1.4

Attempt of collection several proposals of the allocators-wg
Documentation

Alloc-WG

Test Status Lint Status Docs master Docs.rs Crates.io Crates.io

An attempt to collect several proposals of rust-lang/wg-allocators into an 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 on WG repository: rust-lang/wg-allocators#9

  • All three traits were associated with a Builder: BuildAlloc, BuildDealloc, and BuildRealloc such those traits are related to their association similar how BuildHasher is related to Hasher. Although the signatures are different, it makes an even more flexible allocator design possible.

    Issue on WG repository: rust-lang/wg-allocators#12

  • Add 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 on WG repository: 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 on WG repository: rust-lang/wg-allocators#16

To Do

  • provide a minimal implementation for Box<T, B: BuildDealloc>. So far I'm basically done with this, but things has to be cleaned up a bit before.
  • provide a decent documentation for the new traits

License

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.