【rust】Rust 默认引用 std::prelude

读音与词义

prelude 的读音:英式/美式均为 /ˈprel.juːd/("prel-yood")

含义 :名词,意为"序曲、前奏、序幕"。在编程语言中,指自动导入的预定义模块,为代码提供开箱即用的常用功能。

详细说明

自动导入

在 Rust 2024 版本中,每个模块都会自动导入:

rust 复制代码
use std::prelude::rust_2024::*;

这意味着你可以直接使用 prelude 中定义的类型、trait 和函数,无需显式导入。

Prelude 包含的内容

std::prelude 主要包含:

常见类型:

  • String, Vec, Option, Result
  • Box, Cow, Slice

重要 trait:

类别 trait
转换相关 AsRef, AsMut, Into, From
标记 trait Send, Sync, Sized
内存与复制 Clone, Copy, Drop
格式化与默认 Default, Debug
闭包 Fn, FnMut, FnOnce
迭代器 Iterator, DoubleEndedIterator, ExactSizeIterator
异步 (2024 新增) Future, IntoFuture

常用宏:

  • println!, format!, vec!, assert! 等

示例对比

rust 复制代码
// 不需要这样写:
// use std::option::Option;
// use std::vec::Vec;
// use std::string::String;
// use std::boxed::Box;
// use std::future::Future;  // 2024 版本中也不需要显式导入

fn main() {
    // 可以直接使用,因为已经在 prelude 中
    let v: Vec<i32> = vec![1, 2, 3];
    let s = String::from("hello");
    let o: Option<i32> = Some(42);
    let b = Box::new(5);
    
    println!("{}", s);
}

禁用 Prelude

如果需要避免自动导入(例如在 no_std 环境中),可以使用 #![no_implicit_prelude] 属性:

rust 复制代码
#![no_implicit_prelude]
// 现在必须显式导入所有内容
extern crate std;
use std::prelude::rust_2024::*;

各版本对应关系

Rust 版本 默认导入的 prelude
Rust 2015 std::prelude::v1
Rust 2018 std::prelude::rust_2018
Rust 2021 std::prelude::rust_2021
Rust 2024 std::prelude::rust_2024

2024 版本特别说明

Rust 2024 Edition 在 prelude 中新增了 Future 和 IntoFuture 两个异步 trait,这意味着异步编程时无需显式导入这些核心 trait。

升级注意事项 :由于 Future 被加入 prelude,如果代码中存在与 poll 方法同名的方法,可能会产生歧义。运行以下命令可自动修复:

bash 复制代码
cargo fix --edition

注意

  • 在 no_std 环境中,只有 core::prelude 会被导入
  • 不同 Rust Edition 的 prelude 内容可能略有差异,2024 版本是最新标准
相关推荐
niyongsheng6 小时前
多智能体连续时间内路径规划:AA-SIPP(m) 的 Rust 实现与算法
算法·rust·机器人
NetX行者10 小时前
Rust 初体验:一个全栈工程师的编译器“毒打“笔记
开发语言·笔记·rust
Amos_Web13 小时前
Rspack 源码解析(二十七):AsyncWasmParserAndGenerator 如何把二进制变成异步模块
前端·rust
敲代码的玉米C13 小时前
菜单栏做出来了,内存预算却没过:Hostwatch 开发手记(二)
rust
敲代码的玉米C13 小时前
电脑卡了,然后呢?我想用 Rust 做一个 Mac 诊断小工具
rust
GeminiJM15 小时前
从 0 到 1 学 Codex 源码:Rust 基础(一)
rust·源码阅读·cargo·编程入门·codex
恋喵大鲤鱼16 小时前
Rust 依赖包管理
rust
znnnk17 小时前
2026 前端工程化新纪元:Rust 重塑工具链,AI Agent 接管流水线
前端·人工智能·rust
gopher95112 天前
RUST:序列化与反序列化 serde + derive 详解
开发语言·后端·rust
遇码2 天前
流式调用中途断连别直接报错:瞬态故障识别、退避重试与中文根因诊断的搭建方法
大数据·人工智能·ai·rust·数据分析·大模型·agent