Rust 为什么rand::Rng能够在无std环境中工作,即使我没有将默认特性设置为false?

Rust 为什么rand::Rng能够在无std环境中工作,即使我没有将默认特性设置为false?,rust,bare-metal,Rust,Bare Metal,在no\u std环境中使用它之前,我是否需要这样做 lib.rs #![无标准] 使用rand::Rng; pub fn random_small()->u8{ rand::thread_rng()。gen::() } Cargo.toml [dependencies] rand = "0.6.5" 我没有使用#![no_std]在mymain.rs中。是的,您需要禁用兰德的std功能,以便在std不可用的环境中使用它。但是,如果std可用,则不禁用std功能仍然有效 #![no_std

no\u std
环境中使用它之前,我是否需要这样做

lib.rs

#![无标准]
使用rand::Rng;
pub fn random_small()->u8{
rand::thread_rng()。gen::()
}
Cargo.toml

[dependencies]

rand = "0.6.5"

我没有使用
#![no_std]
在mymain.rs中。

是的,您需要禁用兰德的
std
功能,以便在
std
不可用的环境中使用它。但是,如果
std
可用,则不禁用
std
功能仍然有效

#![no_std]
将板条箱的前奏从
std
前奏更改为
core
前奏。
std
序曲如下所示:

extern crate std;
use std::prelude::v1::*;
core
前奏相同,但使用
core
而不是
std
。这意味着,除非您编写
外部板条箱标准,您的板条箱不直接依赖于
std

但是,
#![no_std]
对依赖项没有影响。有一个相关的警告:

⚠️ 警告:使用
no_std
不会阻止链接标准库。放置
外部板条箱标准仍然有效进入板条箱,依赖项也可以将其链接到板条箱中


因此,如果您的目标可用
std
,并且您的一个依赖项需要
std
,那么它将能够使用它。另一方面,如果目标无法使用
std
,那么尝试使用它(隐式或显式)的板条箱将无法编译。

那么
Rand
仍然使用
std
?如果我严格要求
无std
,这不是一个问题吗?