是否可以使用带有no_std的Box?

时间:2016-06-15 18:43:16

标签: rust

我想在Box的箱子里使用no_std。这可能吗?到目前为止,我的简单尝试都没有奏效。

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

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

这不是:

#![no_std]

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

Playground

但是,查看Rust源代码,我看到Box在liballoc中定义了警告

  

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

由于Box不依赖于std但只是为它重新导出,似乎我只需要找出将其导入我的代码的正确方法。 (尽管这似乎不推荐。)

1 个答案:

答案 0 :(得分:1)

您必须导入alloc crate:

#![no_std]
#![feature(alloc)]

extern crate alloc;

use alloc::boxed::Box;

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

请注意,这会编译为lib,但不会因为缺少lang_items而编译为二进制文件。