The alloc crate
Initially added:
Before 1.36.0, the standard library consisted of the crates std
, core
, and proc_macro
.
The core
crate provided core functionality such as Iterator
and Copy
and could be used in #![no_std]
environments since it did not impose any requirements.
Meanwhile, the std
crate provided types like Box<T>
and OS functionality
but required a global allocator and other OS capabilities in return.
Starting with Rust 1.36.0, the parts of std
that depend on a global allocator, e.g. Vec<T>
,
are now available in the alloc
crate. The std
crate then re-exports these parts.
While #![no_std]
binaries using alloc
still require nightly Rust,
#![no_std]
library crates can use the alloc
crate in stable Rust.
Meanwhile, normal binaries, without #![no_std]
, can depend on such library crates.
We hope this will facilitate the development of a #![no_std]
compatible ecosystem of libraries
prior to stabilizing support for #![no_std]
binaries using alloc
.
If you are the maintainer of a library that only relies on some allocation primitives to function,
consider making your library #[no_std]
compatible by using the following at the top of your lib.rs
file:
#![no_std]
extern crate alloc;
use alloc::vec::Vec;