huiali/rust-skills/rust-ownership
Claude Code and agent skill by huiali/rust-skills
- community
Checking that the SKILL.md file is still in the repository.
Ownership, borrowing, and lifetime expert. Handles compiler errors E0382, E0597, E0506, E0507, E0515, E0716, E0106 and provides systematic solutions for memory safety patterns.
Install
npx vskill@latest install huiali/rust-skills/rust-ownershipSKILL.md
Solution Patterns
Pattern 1: Value Moved After Use
Root Cause: Ownership transferred from s1 to s2, s1 is no longer valid.
Solutions:
- Need two copies → use
clone() - Only need to read → pass by reference
&s1 s2is temporary → consider redesign
Pattern 2: Borrow Conflict
Root Cause: Immutable and mutable borrows coexist.
Solutions:
- Ensure mutable borrow completes before creating new borrows
- Restructure code organization
Pattern 3: Lifetime Mismatch
Root Cause: Return value lifetime must be tied to one of the inputs.
Key Solutions:
- Clarify each reference's lifetime
- Use named lifetimes to express relationships
- Prefer returning owned types
Workflow
Step 1: Who Owns the Data?
| Situation | Owner | |
|---|---|---|
| Function parameter | Caller owns | |
| Function-local variable | Function owns (destroyed on return) | |
| Struct field | Struct instance owns | |
Arc<T> | Multiple shared owners |
Step 2: Is Borrowing Appropriate?
| Operation | Borrow Type | Notes | |
|---|---|---|---|
| Read-only | &T | Multiple can coexist | |
| Needs mutation | &mut T | Only one at a time | |
| Will original be modified during borrow? | If yes, that's the issue |
Step 3: Can Lifetimes Be Avoided?
Smart Pointer Selection
| Scenario | Choice | Reason | |
|---|---|---|---|
| Heap-allocate single value | Box<T> | Simple and direct | |
| Single-threaded shared reference counting | Rc<T> | Lightweight | |
| Multi-threaded shared reference counting | Arc<T> | Atomic operations | |
| Need runtime borrow checking | RefCell<T> | Single-threaded interior mutability | |
| Multi-threaded interior mutability | Mutex<T> or RwLock<T> | Thread-safe |
Common Pitfalls
| Anti-Pattern | Problem | Correct Approach | |
|---|---|---|---|
.clone() everywhere | Hides ownership issues | Think about actual ownership needs | |
'static for everything | Too loose and imprecise | Use actual required lifetimes | |
Box::leak() memory leaks | Memory waste | Use proper lifetime management | |
| Fighting the borrow checker | Digging your own hole | Understand and work with compiler design |
Practical Guidance
Common Beginner Questions
1. "When should I use references vs ownership?"
- Function parameters: use references (unless consuming)
- Function returns: use references (if caller doesn't need ownership)
- Storage: consider lifetime complexity
2. "How do I add lifetime annotations?"
- Most cases: compiler can infer
- Need explicit: structs, trait impls, methods returning references
- Use meaningful names:
'connection,'file
3. "Why doesn't this borrow work?"
- Mutable borrows make original inaccessible
- Check borrow scope ranges
- Consider code reorganization
Error Code Quick Reference
| Code | Meaning | Don't Say | Ask Instead | |
|---|---|---|---|---|
| E0382 | Use of moved value | "clone it" | Who should own this data? | |
| E0597 | Lifetime too short | "extend lifetime" | Are scope boundaries correct? | |
| E0506 | Borrow not ended before mutation | "end borrow first" | Where should mutation occur? | |
| E0507 | Move out of reference | "clone before move" | Why move from reference? | |
| E0515 | Return non-owned data | "return owned" | Should caller own the data? | |
| E0716 | Temporary value lifetime insufficient | "bind to variable" | Why is this temporary? | |
| E0106 | Missing lifetime parameter | "add 'a" | What's the lifetime relationship? |
Thinking Process
When encountering ownership issues, follow these steps:
1. What's this data's role in the domain?
- Entity (unique identity) → owned
- Value object (interchangeable) → clone/copy acceptable
- Temporary computation result → consider refactor
2. Is ownership design intentional or accidental?
- Intentional → work within constraints
- Accidental → consider redesign
3. Fix symptom or redesign?
- If failed 3 times → escalate to design level
Trace Up (Design Analysis)
When ownership errors persist, trace to design level:
Trace Down (Implementation)
From design decisions to implementation:
Review Checklist
When reviewing ownership-related code:
- [ ] Each value has a clear owner
- [ ] Borrows don't outlive the borrowed data
- [ ] Mutable and immutable borrows don't overlap
- [ ] Lifetime annotations accurately reflect data relationships
- [ ] Smart pointer choice matches threading requirements
- [ ]
.clone()is used intentionally, not to avoid compiler errors - [ ] Lifetime elision is leveraged where possible
- [ ] Complex lifetime scenarios are documented
Verification Commands
Common Pitfalls
1. Clone Abuse
Symptom: .clone() everywhere to satisfy compiler
Fix: Understand actual ownership requirements, use references where possible
2. Lifetime Overuse
Symptom: Complex lifetime annotations everywhere
Fix: Return owned types, use smart pointers
3. Fighting Borrow Checker
Symptom: Constantly rewriting to satisfy compiler
Fix: Step back and redesign data flow
Related Skills
- rust-mutability - Interior mutability patterns (Cell, RefCell)
- rust-concurrency - Send/Sync and thread safety
- rust-unsafe - Raw pointers and manual memory management
- rust-lifetime-complex - Advanced lifetime patterns (HRTB, GAT)
- rust-resource - Resource management and RAII patterns
- rust-type-driven - Type-driven design
Localized Reference
- Chinese version: SKILL_ZH.md - 完整中文版本,包含所有内容
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/rust-ownership/SKILL.md
Popularity
- Repository stars
- 20
- Repository forks
- 4
- 7-day trend score
- 15
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 20 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/huiali/rust-skills/rust-ownership)