为什么 no_std 板条箱可以依赖于使用 std 的板条箱?

R3m*_*R3m 2 rust rust-no-std

在示例中,hs 从 std 重新导出 HashSet。但它编译时没有错误或警告。为什么?

#![no_std]

pub use hs::HashSet;

pub fn new() -> HashSet<usize> {
    HashSet::new()
}

pub fn insert(a: &mut HashSet<usize>, v: usize) {
    a.insert(v);
}
Run Code Online (Sandbox Code Playgroud)

caf*_*e25 6

好吧,只是意味着您默认#![no_std]不包含. 这并不意味着您不能显式或隐式(即通过其他板条箱)仍然包含. 换句话说,不禁止使用,但默认情况下禁用它。std std#![no_std]std

例如,这也有效:

#![no_std]
extern crate std;
fn main() {
    std::println!("hello!");
}
Run Code Online (Sandbox Code Playgroud)