🎯

m03-mutability

🎯Skill

from goooice/rust-skills

VibeIndex|
What it does

Diagnoses and guides resolution of Rust mutability and borrowing conflicts by analyzing ownership, mutation patterns, and thread-safety requirements.

πŸ“¦

Part of

goooice/rust-skills(35 items)

m03-mutability

Installation

Add MarketplaceAdd marketplace to Claude Code
/plugin marketplace add ZhangHanDong/rust-skills
Install PluginInstall plugin from marketplace
/plugin install rust-skills@rust-skills
Quick InstallInstall with npx
npx skills add ZhangHanDong/rust-skills
git cloneClone repository
git clone https://github.com/ZhangHanDong/rust-skills.git
πŸ“– Extracted from docs: goooice/rust-skills
4Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

"CRITICAL: Use for mutability issues. Triggers: E0596, E0499, E0502, cannot borrow as mutable, already borrowed as immutable, mut, &mut, interior mutability, Cell, RefCell, Mutex, RwLock, ε―ε˜ζ€§, ε†…ιƒ¨ε―ε˜ζ€§, ε€Ÿη”¨ε†²ηͺ"

Overview

# Mutability

> Layer 1: Language Mechanics

Core Question

Why does this data need to change, and who can change it?

Before adding interior mutability, understand:

  • Is mutation essential or accidental complexity?
  • Who should control mutation?
  • Is the mutation pattern safe?

---

Error β†’ Design Question

| Error | Don't Just Say | Ask Instead |

|-------|----------------|-------------|

| E0596 | "Add mut" | Should this really be mutable? |

| E0499 | "Split borrows" | Is the data structure right? |

| E0502 | "Separate scopes" | Why do we need both borrows? |

| RefCell panic | "Use try_borrow" | Is runtime check appropriate? |

---

Thinking Prompt

Before adding mutability:

  1. Is mutation necessary?

- Maybe transform β†’ return new value

- Maybe builder β†’ construct immutably

  1. Who controls mutation?

- External caller β†’ &mut T

- Internal logic β†’ interior mutability

- Concurrent access β†’ synchronized mutability

  1. What's the thread context?

- Single-thread β†’ Cell/RefCell

- Multi-thread β†’ Mutex/RwLock/Atomic

---

Trace Up ↑

When mutability conflicts persist:

```

E0499/E0502 (borrow conflicts)

↑ Ask: Is the data structure designed correctly?

↑ Check: m09-domain (should data be split?)

↑ Check: m07-concurrency (is async involved?)

```

| Persistent Error | Trace To | Question |

|-----------------|----------|----------|

| Repeated borrow conflicts | m09-domain | Should data be restructured? |

| RefCell in async | m07-concurrency | Is Send/Sync needed? |

| Mutex deadlocks | m07-concurrency | Is the lock design right? |

---

Trace Down ↓

From design to implementation:

```

"Need mutable access from &self"

↓ T: Copy β†’ Cell

↓ T: !Copy β†’ RefCell

"Need thread-safe mutation"

↓ Simple counters β†’ AtomicXxx

↓ Complex data β†’ Mutex or RwLock

"Need shared mutable state"

↓ Single-thread: Rc>

↓ Multi-thread: Arc>

```

---

Borrow Rules

```

At any time, you can have EITHER:

β”œβ”€ Multiple &T (immutable borrows)

└─ OR one &mut T (mutable borrow)

Never both simultaneously.

```

Quick Reference

| Pattern | Thread-Safe | Runtime Cost | Use When |

|---------|-------------|--------------|----------|

| &mut T | N/A | Zero | Exclusive mutable access |

| Cell | No | Zero | Copy types, no refs needed |

| RefCell | No | Runtime check | Non-Copy, need runtime borrow |

| Mutex | Yes | Lock contention | Thread-safe mutation |

| RwLock | Yes | Lock contention | Many readers, few writers |

| Atomic* | Yes | Minimal | Simple types (bool, usize) |

Error Code Reference

| Error | Cause | Quick Fix |

|-------|-------|-----------|

| E0596 | Borrowing immutable as mutable | Add mut or redesign |

| E0499 | Multiple mutable borrows | Restructure code flow |

| E0502 | &mut while & exists | Separate borrow scopes |

---

Interior Mutability Decision

| Scenario | Choose |

|----------|--------|

| T: Copy, single-thread | Cell |

| T: !Copy, single-thread | RefCell |

| T: Copy, multi-thread | AtomicXxx |

| T: !Copy, multi-thread | Mutex or RwLock |

| Read-heavy, multi-thread | RwLock |

| Simple flags/counters | AtomicBool, AtomicUsize |

---

Anti-Patterns

| Anti-Pattern | Why Bad | Better |

|--------------|---------|--------|

| RefCell everywhere | Runtime panics | Clear ownership design |

| Mutex for single-thread | Unnecessary overhead | RefCell |

| Ignore RefCell panic | Hard to debug | Handle or restructure |

| Lock inside hot loop | Performance killer | Batch operations |

---

Related Skills

| When | See |

|------|-----|

| Smart pointer choice | m02-resource |

| Thread safety | m07-concurrency |

| Data structure design | m09-domain |

| Anti-patterns | m15-anti-pattern |

More from this repository10

🎯
m14-mental-model🎯Skill

Applies the M14 mental model framework to enhance decision-making and strategic thinking through structured cognitive analysis.

🎯
m04-zero-cost🎯Skill

Guides developers in choosing zero-cost abstractions by analyzing type system constraints and performance trade-offs in Rust generics and traits.

🎯
m10-performance🎯Skill

Optimizes code performance by identifying bottlenecks, measuring impact, and guiding strategic improvements across algorithm, data structure, and memory efficiency.

🎯
meta-cognition-parallel🎯Skill

Performs parallel three-layer meta-cognitive analysis by forking subagents to simultaneously analyze language mechanics, design choices, and domain constraints, then synthesizing results.

🎯
unsafe-checker🎯Skill

Identifies and reviews unsafe Rust code patterns, FFI risks, and potential memory unsafety in Rust projects.

🎯
rust-skill-creator🎯Skill

Dynamically generates Claude skills for Rust crates, standard library modules, and documentation by extracting and processing technical details from specified URLs.

🎯
coding-guidelines🎯Skill

Provides comprehensive Rust coding guidelines covering naming conventions, best practices, error handling, memory management, concurrency, and code style recommendations.

🎯
rust-refactor-helper🎯Skill

Performs safe Rust refactoring by analyzing symbol references, checking conflicts, and applying changes across project files using LSP.

🎯
domain-iot🎯Skill

Enables building robust, efficient IoT applications with offline-first design, power-aware networking, and secure device communication using Rust.

🎯
m05-type-driven🎯Skill

Explores and demonstrates type-driven development techniques in Rust, showcasing advanced type system features and pattern matching strategies.