9 releases
| 0.1.8 | Dec 20, 2022 |
|---|---|
| 0.1.7 | Dec 18, 2022 |
| 0.1.6 | Nov 11, 2022 |
| 0.1.5 | Aug 27, 2022 |
| 0.1.1 | Apr 29, 2022 |
#247 in No standard library
40 downloads per month
Used in 4 crates
(3 directly)
18KB
160 lines
allocator-fallback
This crate provides a minimal fallback for the standard library’s allocator API, which is currently unstable.
Usage
Because allocator-fallback can be configured to re-export the real
unstable allocator API (see Crate features), users
of this crate must make sure they conditionally enable
#![feature(allocator_api)] in preparation for this occurrence; otherwise,
compilation errors may occur. This is the case even for crates that never
directly enable allocator-fallback’s allocator_api feature, because a
different crate that also depends on allocator-fallback could enable it.
To accomplish this, in Cargo.toml, duplicate your dependency on
allocator-fallback in the [build-dependencies] section. For example:
[dependencies]
allocator-fallback = "0.1.7"
[build-dependencies]
allocator-fallback = "0.1.7"
Then, add a build script (build.rs) with the following
contents:[^1]
fn main() {
if allocator_fallback::HAS_ALLOCATOR_API {
println!("cargo:rustc-cfg=has_allocator_api");
}
println!("cargo:rerun-if-changed=build.rs");
}
Finally, at the top of your crate root (likely lib.rs or main.rs), add
the following:
#![cfg_attr(has_allocator_api, feature(allocator_api))]
Use as an optional dependency
The instructions above will not work if allocator-fallback is declared
as an optional dependency. In this case, adjust the instructions as
follows:
Duplicate the dependency on allocator-fallback in [build-dependencies]
as before, keeping optional = true in both occurrences. For example:
[dependencies.allocator-fallback]
version = "0.1.7"
optional = true
[build-dependencies.allocator-fallback]
version = "0.1.7"
optional = true
Then, use the following as the contents of your build script (build.rs)
instead:[^1]
fn main() {
#[cfg(feature = "allocator-fallback")]
if allocator_fallback::HAS_ALLOCATOR_API {
println!("cargo:rustc-cfg=has_allocator_api");
}
println!("cargo:rerun-if-changed=build.rs");
}
Finally, as before, add the following to the top of your crate root:
#![cfg_attr(has_allocator_api, feature(allocator_api))]
[^1]: These build script code snippets have been released to the public domain using the CC0 1.0 Universal Public Domain Dedication.
Crate features
If the crate feature allocator_api is enabled, this crate will simply
re-export the real allocator API in the standard library. Of course, this
requires Rust nightly.
If the crate feature std is enabled (the default), the crate will use
std; otherwise, it will be no_std. Using std allows
AllocError to implement std::error::Error.