5.12.不使用标准库开发 Rust

优质
小牛编辑
129浏览
2023-12-01

Rust 的标准库提供了很多有用的功能,不过它假设它的 host 系统的多种功能的支持:线程,网络,堆分配和其他功能。有些系统并没有这些功能,不过,Rust也能在这些系统上工作。为此,我们可以通过一个属性来告诉 Rust 我们不想使用标准库:#![no_std]

注意:这个功能技术上是稳定的,不过有些附加条件。其一,你可以构建一个稳定的#![no_std]库,但二进制文件不行。关于没有标准库的库文件的细节,查看关于#![no_std]的章节

为了使用#![no_std],在 crate 的根文件上加入:

#![no_std]

fn plus_one(x: i32) -> i32 {
    x + 1
}

很多暴露于标准库中的功能通过core crate也同样可用。当我们使用标准库时,Rust 自动将std引入到作用域中,允许我们不用显示导入就能使用相关功能。相似的,当使用#![no_std],Rust 会将core引入作用域中,以及它的 prelude。这意味着很多代码也是能正常运行的:

#![no_std]

fn may_fail(failure: bool) -> Result<(), &'static str> {
    if failure {
        Err("this didn’t work!")
    } else {
        Ok(())
    }
}