用途
rust-ops 是一个面向 Rust 开发的综合性技能条目,用于在编写 Rust 代码时提供所有权、异步、错误处理和生态实践方面的参考与决策辅助。资料标注其生态事实核实时间为 2026-07。
主要能力
所有权与借用速查
资料给出“谁拥有值”的决策树:转移所有权用 move(let s2 = s1;,此后 s1 失效);只读不拥有用共享借用 &T(可多个,不可变);可变但不拥有用独占借用 &mut T(只能一个,且无其他借用);跨线程共享所有权用 Arc<T>,需可变则 Arc<Mutex<T>>;单线程共享所有权用 Rc<T>(非 Send),需可变则 Rc<RefCell<T>>;避免克隆大数据用 Cow<'a, T>。借用规则:任意时刻要么一个 &mut T,要么任意数量 &T;引用必须始终有效;规则在编译期强制,零运行时开销。
错误处理
资料提供错误处理决策树:操作可能无值(无需错误信息)用 Option<T>;库代码(调用方需要匹配错误变体)用 thiserror,#[derive(Error)] 枚举,各变体可用 #[from] 包装源错误;应用代码(只需上下文、不需匹配)用 anyhow,anyhow::Result<T> 配合 .context("msg");错误类型转换可实现 From<SourceError> for MyError 或 thiserror 的 #[from];真正不可恢复(违反不变量)用 panic!() 或 unwrap(),库代码中应避免。
资料给出 thiserror、anyhow 的代码示例,以及 ? 运算符在 Result 与 Option 上的用法:? 作用于 Result 时提前返回 Err、解包 Ok;作用于 Option 时提前返回 None、解包 Some;可用 map_err 链式附加上下文。
Trait 设计与派生
常见派生:值类型 #[derive(Debug, Clone, PartialEq, Eq, Hash)];API 类型 #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)];错误类型 #[derive(Debug, thiserror::Error)]。
Trait 对象(dyn Trait)与泛型(T: Trait)的对比:分发方式为动态(vtable)与静态(单态化);二进制体积更小与更大(每类型复制);性能略有开销与零成本;异构集合支持“是”与“否”;适用场景为运行时多态、插件系统与性能关键、类型已知。资料同时给出泛型与 trait 对象的使用示例。
关键 Trait 表中列出 Debug、Clone、Copy、Display、From/Into、Send、Sync、Deref、Iterator、Default 的用途与是否可自动派生:其中 Display、From/Into、Deref、Iterator 不可自动派生(From 需实现后免费获得 Into);Send、Sync 为自动。
异步与生态选型
异步决策树:I/O 密集型(网络、文件、数据库)用 tokio;CPU 密集型不用异步,用 rayon 做数据并行,或用 tokio::task::spawn_blocking 与异步混合;简单脚本或 CLI 工具通常不需要异步,阻塞 I/O 即可。需要异步时:运行时用 tokio(主流)或 async-std;HTTP 客户端用 reqwest;HTTP 服务端用 axum(基于 tower)或 actix-web;数据库用 sqlx(编译期检查);结构化日志用 tracing。
资料给出 tokio 快速开始示例(#[tokio::main]、tokio::join!、tokio::select! 与超时处理),并列出通道类型:mpsc(多生产者单消费者,tokio::sync::mpsc)、oneshot(单值单次,tokio::sync::oneshot)、broadcast(多消费者,每个都收到每条消息,tokio::sync::broadcast)、watch(单值仅最新,适用于配置重载,tokio::sync::watch)。
Cargo 与构建
资料列出常用命令:cargo new(二进制)与 cargo new --lib(库);cargo build(debug)、cargo build --release(优化)、cargo run、cargo run --example name;cargo test、指定测试名、-- --nocapture 显示打印输出;cargo add(含 --features derive、-F full)、cargo update;cargo check、cargo clippy、cargo fmt;工作区相关 cargo test --workspace、cargo build -p my-crate。
Feature Flags 示例与 release profile 调优:lto = true(更小更快的二进制)、codegen-units = 1(更优优化但增加编译时间)。
常见踩坑
资料以表格列出常见问题及原因与修复:String 与 &str(拥有与借用、函数签名,参数接受 &str、返回 String);借用检查器冲突(可变时借用 self,拆分结构、用索引、必要时克隆);生命周期省略困惑(显式写出来理解后再省略);返回值中的 impl Trait(不同分支必须返回同一类型,异构返回用 Box<dyn Trait>);tokio::Mutex 与 std::Mutex(std 的不能跨 .await 持有,跨 await 点用 tokio 的);孤儿规则(不能为外部类型实现外部 trait,用 newtype 模式 struct Wrapper(ForeignType));Pin 困惑(自引用异步 future 需要,用 Box::pin());异步的 Send 约束(spawn 的 future 必须 Send,异步中避免 Rc、RefCell,改用 Arc、Mutex);生产环境中的 .unwrap()(None/Err 时 panic,改用 ?、.unwrap_or()、.expect("reason"))。
serde 快速参考
资料给出 serde 示例,包含 #[serde(rename_all = "camelCase")]、skip_serializing_if = "Option::is_none"、#[serde(default)]、#[serde(rename = "type")]、#[serde(with = "chrono::serde::ts_seconds")],以及 serde_json 与 serde_yaml 的序列化、反序列化调用。
使用方式
资料未提供该技能的安装命令或调用方式,暂未提供。资料描述了内部机制:通过 python scripts/check-rust-facts.py --offline 做时效性检查,断言已编目的带版本事实(tokio、axum、serde)仍出现在正文中且带日期的时效说明存在;--live 用于确认每个 crate 在 crates.io 的主版本仍与文档主版本一致;目录文件为 assets/rust-facts.json。
参考文件按需加载,各自独立:./references/ownership-lifetimes.md(借用规则、生命周期标注与省略、内部可变性、常见借用检查器模式)、./references/traits-generics.md(trait 设计、关联类型、super trait、泛型与约束、sealed/扩展 trait)、./references/error-handling.md(Result/Option 组合子、thiserror/anyhow 深入、错误转换、panic/recover)、./references/async-tokio.md(tokio 运行时、spawn、通道、select、streams、优雅关闭、异步 trait、Mutex 选择)、./references/ecosystem.md(serde 进阶、clap、reqwest、sqlx、axum、tracing、rayon、itertools、Cow)、./references/testing.md(单元/集成/文档测试、异步测试、mockall、proptest、criterion 基准)。
适用场景
适用于 Rust 项目的日常开发参考,尤其适合:需要判断所有权与借用方案时、选择错误处理策略与库(thiserror/anyhow)时、决定是否使用异步及选取 tokio 生态组件时、进行 Cargo 构建与发布配置时、排查常见编译与并发问题(借用检查器、Send 约束、Mutex 选择、孤儿规则)时,以及序列化场景的 serde 配置。
限制
资料标注“生态事实核实截至 2026-07”,并提供了时效性检查脚本与目录,说明带版本事实会随时间过时,需要运行检查确认。资料未说明该技能的具体运行环境要求、依赖安装方式、支持的 Rust 版本或与哪些工具集成,暂未提供。资料亦未提供收费、价格与平台信息,暂未提供。