跳到主要内容
知仓学习社ZHICANG

rust-ownership-borrowing

Design and review Rust ownership, borrowing, lifetimes, and interior mutability so data flow matches the domain model. Use when writing, refactoring…

不碰外部(只输出文字)无严重或高危命中hashgraph-online/awesome-codex-plugins

它会碰到什么

扫了多少3 个文本文件,6 KB
它会碰到什么不碰外部(只输出文字)
命中总数0 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

Rust Ownership Borrowing

Use this skill to make ownership shape match the program's data flow. Treat

borrow-checker errors as design feedback: decide who owns each value, how long

access must last, and whether mutation needs exclusivity or a different data

shape.

Core Workflow

  1. Identify the owner of each value crossing the failing code path.
  2. Decide the required access for each function: own, shared borrow, mutable

borrow, or shared ownership.

  1. Shorten borrows before changing types. Introduce blocks, temporary values,

helper functions, or earlier extraction so references end before mutation.

  1. Prefer moving values when the caller no longer needs them. Prefer borrowing

when the caller retains ownership. Clone only when duplicate ownership is

intentional and the cost is acceptable.

  1. Replace self-referential or graph-like designs with IDs, indices, arenas, or

ownership trees before reaching for Rc<RefCell<_>>.

  1. Use Rc for single-threaded shared ownership and Arc for cross-thread

shared ownership. Add Cell, RefCell, Mutex, or RwLock only when the

mutation model is explicit.

  1. Add tests that exercise the ownership-sensitive behavior, not just the

compiler error that prompted the change.

Signature Rules

  • Take T when the function consumes or stores the value.
  • Take &T when the function only reads during the call.
  • Take &mut T when the function must mutate and no other access should occur.
  • Return owned values unless the returned reference is clearly tied to an input

lifetime.

  • Avoid accepting &Vec<T>, &String, or &PathBuf when &[T], &str, or

&Path expresses the needed capability.

  • Avoid adding lifetime parameters to structs unless the struct truly borrows

data owned elsewhere. Owned fields are usually simpler.

Common Fix Patterns

Read references/borrow-patterns.md when resolving non-trivial compiler

errors or reviewing a borrow-heavy patch.

  • Narrow the scope of immutable borrows before taking a mutable borrow.
  • Use Option::take, std::mem::take, or std::mem::replace to move a field

out while leaving a valid value behind.

  • Use collection APIs such as split_at_mut, get_mut, entry, drain, and

retain instead of indexing patterns that create overlapping borrows.

  • Clone handles like Arc, Rc, and cheap IDs freely when that is the intended

ownership handle; avoid cloning payloads to silence the compiler.

  • Convert iterator chains to explicit loops only when it makes borrow lifetimes

clearer or avoids hidden captures.

Review Checklist

  • Ownership follows the domain model; types are not wrapped just to bypass the

borrow checker.

  • Clone is deliberate and tested for semantic independence where relevant.
  • Interior mutability has a clear invariant and a small access surface.
  • Lifetimes describe real borrowing relationships, not guesses added until the

compiler accepts the code.

  • Async or threaded code uses Arc plus the right synchronization primitive;

Rc and RefCell stay out of cross-thread paths.

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。