rust-ownership-borrowing
Design and review Rust ownership, borrowing, lifetimes, and interior mutability so data flow matches the domain model. Use when writing, refactoring…
它会碰到什么
这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。
技能内容
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
- Identify the owner of each value crossing the failing code path.
- Decide the required access for each function: own, shared borrow, mutable
borrow, or shared ownership.
- Shorten borrows before changing types. Introduce blocks, temporary values,
helper functions, or earlier extraction so references end before mutation.
- 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.
- Replace self-referential or graph-like designs with IDs, indices, arenas, or
ownership trees before reaching for Rc<RefCell<_>>.
- Use
Rcfor single-threaded shared ownership andArcfor cross-thread
shared ownership. Add Cell, RefCell, Mutex, or RwLock only when the
mutation model is explicit.
- Add tests that exercise the ownership-sensitive behavior, not just the
compiler error that prompted the change.
Signature Rules
- Take
Twhen the function consumes or stores the value. - Take
&Twhen the function only reads during the call. - Take
&mut Twhen 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&PathBufwhen&[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, orstd::mem::replaceto 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.
Cloneis 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
Arcplus the right synchronization primitive;
Rc and RefCell stay out of cross-thread paths.
想直接用这个技能?
本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。
它属于哪个仓库
plugins/LVTD-LLC/skills/skills/rust-ownership-borrowing/SKILL.md