m03-mutability

zhanghandong/rust-skills · updated Apr 8, 2026

$npx skills add https://github.com/zhanghandong/rust-skills --skill m03-mutability
0 commentsdiscussion
summary

Rust mutability design: choosing between &mut , interior mutability, and thread-safe patterns.

  • Guides decision-making for E0596, E0499, E0502 errors by asking whether mutation is necessary and who controls it, rather than reflexively adding mut
  • Covers single-thread patterns (Cell, RefCell) and multi-thread patterns (Mutex, RwLock, Atomic types) with clear selection criteria
  • Includes borrow rule reference, anti-patterns (RefCell overuse, Mutex in hot loops), and decision tables f
skill.md

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
  2. Who controls mutation?

    • External caller → &mut T
    • Internal logic → interior mutability
    • Concurrent access → synchronized mutability
  3. 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>
    ↓ T: !Copy → RefCell<T>

"Need thread-safe mutation"
    ↓ Simple counters → AtomicXxx
    ↓ Complex data → Mutex<T> or RwLock<T>

"Need shared mutable state"
    ↓ Single-thread: Rc<RefCell<T>>
    ↓ Multi-thread: Arc<Mutex<T>>

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<T> No Zero Copy types, no refs needed
RefCell<T> No Runtime check Non-Copy, need runtime borrow
Mutex<T> Yes Lock contention Thread-safe mutation
RwLock<T> 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>
T: !Copy, single-thread RefCell<T>
T: Copy, multi-thread AtomicXxx
T: !Copy, multi-thread Mutex<T> or RwLock<T>
Read-heavy, multi-thread RwLock<T>
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

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.848 reviews
  • Mateo Bansal· Dec 8, 2024

    m03-mutability reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Mateo Agarwal· Dec 4, 2024

    Solid pick for teams standardizing on skills: m03-mutability is focused, and the summary matches what you get after install.

  • Maya Liu· Dec 4, 2024

    We added m03-mutability from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Arya Desai· Nov 27, 2024

    Registry listing for m03-mutability matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Mateo Patel· Nov 27, 2024

    Useful defaults in m03-mutability — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Sofia Khanna· Nov 23, 2024

    m03-mutability is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • Arjun Gonzalez· Nov 23, 2024

    m03-mutability fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Mateo Menon· Oct 18, 2024

    Keeps context tight: m03-mutability is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Arya Dixit· Oct 18, 2024

    m03-mutability has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • Sofia Tandon· Oct 14, 2024

    m03-mutability fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

showing 1-10 of 48

1 / 5