• 不使用标准库开发 Rust

    不使用标准库开发 Rust

    no-stdlib.md


    commit 98b18fabddaa942c6bbbb44509b7c00f4b07915f

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

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

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

    1. #![no_std]
    2. fn plus_one(x: i32) -> i32 {
    3. x + 1
    4. }

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

    1. #![no_std]
    2. fn may_fail(failure: bool) -> Result<(), &'static str> {
    3. if failure {
    4. Err("this didn’t work!")
    5. } else {
    6. Ok(())
    7. }
    8. }