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
,这不是一个问题吗?