不使用标准库开发 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. }