Rust 是否可以使用没有标准的盒子?

Rust 是否可以使用没有标准的盒子?,rust,Rust,我想在一个装有无标准的板条箱中使用盒子。这可能吗?到目前为止,我的简单尝试没有奏效 这将编译(但使用标准库): fn main(){ 设为:Box=Box::new([0;10]); } 这并不是: #![no_std] fn main() { let _: Box<[u8]> = Box::new([0; 10]); } #![无标准] fn main(){ 设为:Box=Box::new([0;10]); } () 然而,通过查看Rust源代码,我看到框是在lib

我想在一个装有
无标准
的板条箱中使用
盒子
。这可能吗?到目前为止,我的简单尝试没有奏效

这将编译(但使用标准库):

fn main(){
设为:Box=Box::new([0;10]);
}
这并不是:

#![no_std]

fn main() {
    let _: Box<[u8]> = Box::new([0; 10]);
}
#![无标准]
fn main(){
设为:Box=Box::new([0;10]);
}
()

然而,通过查看Rust源代码,我看到
是在liballoc中定义的,带有警告

该库与libcore一样,不是用于一般用途,而是作为其他库的构建块。此库中的类型和接口通过标准库重新导出,不应通过此库使用

由于
Box
不依赖于std,而只针对std进行重新导出,因此我似乎只需要找出将其导入代码的正确方法。(尽管似乎不建议这样做。)

您必须导入:

#![无标准]
外置板条箱;
使用alloc::boxed::Box;
fn main(){
设为:Box=Box::new([0;10]);
}
alloc
板条箱是编译器提供的(就像非
no_std
环境中的
std
一样),因此您不需要从clarets.io中提取它或在
Cargo.toml
中指定它。板条箱是稳定的,因为生锈1.36()


请注意,由于缺少
lang\u项
,因此它编译为lib,而不是二进制。不幸的是,编译一个
no_-std
二进制文件仍然需要每晚都生锈。

看起来像
#![功能(alloc)]
将永远保持稳定。有没有办法在stable上的
no_std
中使用
Box
呢?仔细想想,Box似乎不应该出现在基本语言定义中,因为它假设了一个堆。但是堆可能不是在所有平台上都可用。你是对的@AndrewStraw,这就是确切的原因。现在有一个开放的RFC来稳定alloc:
alloc
已在1.36中稳定。我更新了答案。
#![no_std]

fn main() {
    let _: Box<[u8]> = Box::new([0; 10]);
}
#![no_std]

extern crate alloc;

use alloc::boxed::Box;

fn main() {
    let _: Box<[u8]> = Box::new([0; 10]);
}