Agent Skills
返回列表
💻

Rust 所有权排错手册

开发编程 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @kunlungrowth/rust-ownership。

技能介绍

你遇到的不是语法错误,是所有权冲突

写 Rust 最常见的体验是:代码看起来没问题,编译器却报 E0505、E0597 或 E0499。这类错误的根源往往不是不会写代码,而是引用的生命周期和所有权发生了重叠。比如在循环里遍历 HashMap 的 keys() 时还想调用 insert()——前者借用了不可变引用,后者需要可变引用,Rust 直接拒绝。

这类问题靠死记语法解决不了,需要一套系统的诊断流程。

技能如何帮你定位问题

这个技能把 Rust 所有权相关的排查拆成五个步骤:

  • 诊断 borrow checker 报错:逐一解析 E0505、E0597、E0499 等错误码的含义,定位 borrow 与 move 的时间线冲突点。修复套路是:确定约束 → 缩短借用范围 → 不行就 clone 或改用智能指针。
  • 生命周期标注:讲清三条 elision rules 能覆盖 90% 场景,只在多个入参引用且返回引用时才需要手动标注。'static 的用途和限制也会说明。
  • 智能指针选型:Box、Rc、Arc、RefCell、Mutex、RwLock、Cow 各自适用什么场景,以及单线程到多线程怎么组合。
  • 避免 clone() 的模式:能借就别拥有,优先用 &mut self 修改而非消费后重建,用 Cow 延迟克隆。
  • async 生命周期陷阱:async fn 的 Future 捕获所有入参引用,tokio::spawn 要求 'static,共享数据要 Arc 持有。

输出包含错误解读、原代码与修改后代码的逐行对照,以及 ASCII 生命周期图示,方便直观看到引用的有效范围。

适用边界

这个技能不负责 Rust 语法入门——如果连 let、match 都没用过,先去读 The Book。它也不管特定框架的用法,比如 Actix、Axum、Bevy 的业务逻辑不在范围内。如果问题是编译错误或智能指针选型,而不是框架配置,这个技能能帮上忙。

使用场景

  • Rust 项目编译报 E0505/E0597/E0499,需要定位 borrow 与 move 的时间线冲突并修复
  • 在 struct 中持有引用,不确定何时需要手动标注生命周期参数
  • 实现图/DAG/AST 数据结构或并发共享状态,需要在 Box/Rc/Arc/RefCell/Mutex 间做选择
  • async 代码里 tokio::spawn 报 'static 错误,需要确认被引用的数据如何用 Arc 持有

适合人员

  • 用 Rust 写系统服务的后端工程师,borrow checker 报错时想按规则修复而不是无脑 clone
  • 从 Java/Python/C++ 转 Rust 的开发者,需要建立所有权与借用的正确直觉
  • 写并发或异步服务的 Rust 工程师,需要在 Arc/Mutex/RwLock 间做选型决策
  • 实现图、AST 等共享数据结构的 Rust 开发者,要搞清楚 Rc 与 Arc 的边界