- Home
- Skills
- Zhanghandong
- Rust Skills
- M03 Mutability
m03-mutability_skill
- Shell
565
GitHub Stars
1
Bundled Files
2 months ago
Catalog Refreshed
4 months ago
First Indexed
Readme & install
Copy the install command, review bundled files from the catalogue, and read any extended description pulled from the listing source.
Installation
Preview and clipboard use veilstrat where the catalogue uses aiagentskills.
npx veilstrat add skill zhanghandong/rust-skills --skill m03-mutability- SKILL.md4.1 KB
Overview
This skill helps diagnose and fix Rust mutability and interior-mutability issues. It focuses on compiler errors like E0596, E0499, E0502 and runtime RefCell panics, and guides you to safer design choices. Use it to decide when to add mutability, choose the right mutable container, or restructure data to avoid borrow conflicts.
How this skill works
I inspect error triggers and runtime symptoms and map them to design questions rather than quick fixes. The skill asks whether mutation is necessary, who should control it, and what thread context applies. It then recommends patterns (&mut, Cell, RefCell, Mutex, RwLock, Atomics) and points to restructuring or concurrency checks when borrows repeatedly collide.
When to use it
- When the compiler reports E0596, E0499, or E0502
- When you see RefCell borrow panics at runtime
- When unsure whether to add mutability or use interior mutability
- When choosing thread-safe vs single-thread mutable containers
- When borrow conflicts suggest data should be restructured
Best practices
- Ask if mutation is essential; prefer returning new values or builder patterns when possible
- Decide who owns mutation: external callers (&mut) vs internal interior mutability vs synchronized concurrency
- Match tool to context: Cell/RefCell for single-thread, Mutex/RwLock/Atomic for multi-thread
- Trace persistent borrow errors to domain design — maybe split the data or change ownership
- Avoid RefCell proliferation; prefer clear ownership and handle runtime borrow errors explicitly
Example use cases
- Fix E0596: decide if adding mut is correct or if API should return an owned modified value
- Resolve E0499/E0502: split data into separate fields or change call ordering to avoid overlapping borrows
- Replace RefCell in async code with thread-safe primitives when Send/Sync is required
- Implement a shared counter: use AtomicUsize for simple counts, Mutex for complex state
- Switch single-thread mutable containers to RefCell/Cell to remove unnecessary locking
FAQ
No. First confirm mutation is necessary and who should own it. Adding mut hides a design choice and can worsen borrow conflicts.
When to prefer RefCell vs Mutex?
Use RefCell for non-threaded interior mutability (runtime borrow checks). Use Mutex/RwLock when access must be thread-safe or Send/Sync is required.