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]);
}