我想Box在板条箱中使用no_std。这可能吗?到目前为止我的简单尝试还没有奏效。
编译(但使用标准库):
fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}
Run Code Online (Sandbox Code Playgroud)
这不会:
#![no_std]
fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}
Run Code Online (Sandbox Code Playgroud)
(游乐场)
然而,查看 Rust 源代码,我发现Boxliballoc 中定义了警告
该库与 libcore 一样,不适合一般用途,而是作为其他库的构建块。该库中的类型和接口通过标准库重新导出,不应通过该库使用。
由于Box不依赖于 std 而只是重新导出它,看来我只需要找出将其导入到我的代码中的正确方法。(尽管这似乎不推荐。)
mal*_*rbo 10
#![no_std]
extern crate alloc;
use alloc::boxed::Box;
fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}
Run Code Online (Sandbox Code Playgroud)
该alloc板条箱是由编译器提供的(就像std在非no_std环境中一样),因此您不需要从 crates.io 中提取它或在Cargo.toml. 从 Rust 1.36 开始,板条箱就稳定了(稳定 PR)。
请注意,这会编译为 lib,但由于缺少lang_items. 不幸的是,编译no_std二进制文件仍然需要 Rust nightly。