๐ŸŽฏ

m02-resource

๐ŸŽฏSkill

from actionbook/rust-skills

VibeIndex|
What it does

Guides developers in selecting the right smart pointer and resource management strategy based on ownership, thread safety, and design constraints.

๐Ÿ“ฆ

Part of

actionbook/rust-skills(35 items)

m02-resource

Installation

Quick InstallInstall with npx
npx skills add ZhangHanDong/rust-skills
CargoRun with Cargo (Rust)
cargo install cowork
git cloneClone repository
git clone https://github.com/ZhangHanDong/rust-skills.git
Add MarketplaceAdd marketplace to Claude Code
/plugin marketplace add ZhangHanDong/rust-skills
๐Ÿ“– Extracted from docs: actionbook/rust-skills
15Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

"CRITICAL: Use for smart pointers and resource management. Triggers: Box, Rc, Arc, Weak, RefCell, Cell, smart pointer, heap allocation, reference counting, RAII, Drop, should I use Box or Rc, when to use Arc vs Rc, ๆ™บ่ƒฝๆŒ‡้’ˆ, ๅผ•็”จ่ฎกๆ•ฐ, ๅ †ๅˆ†้…"

Overview

# Resource Management

> Layer 1: Language Mechanics

Core Question

What ownership pattern does this resource need?

Before choosing a smart pointer, understand:

  • Is ownership single or shared?
  • Is access single-threaded or multi-threaded?
  • Are there potential cycles?

---

Error โ†’ Design Question

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

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

| "Need heap allocation" | "Use Box" | Why can't this be on stack? |

| Rc memory leak | "Use Weak" | Is the cycle necessary in design? |

| RefCell panic | "Use try_borrow" | Is runtime check the right approach? |

| Arc overhead complaint | "Accept it" | Is multi-thread access actually needed? |

---

Thinking Prompt

Before choosing a smart pointer:

  1. What's the ownership model?

- Single owner โ†’ Box or owned value

- Shared ownership โ†’ Rc/Arc

- Weak reference โ†’ Weak

  1. What's the thread context?

- Single-thread โ†’ Rc, Cell, RefCell

- Multi-thread โ†’ Arc, Mutex, RwLock

  1. Are there cycles?

- Yes โ†’ One direction must be Weak

- No โ†’ Regular Rc/Arc is fine

---

Trace Up โ†‘

When pointer choice is unclear, trace to design:

```

"Should I use Arc or Rc?"

โ†‘ Ask: Is this data shared across threads?

โ†‘ Check: m07-concurrency (thread model)

โ†‘ Check: domain-* (performance constraints)

```

| Situation | Trace To | Question |

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

| Rc vs Arc confusion | m07-concurrency | What's the concurrency model? |

| RefCell panics | m03-mutability | Is interior mutability right here? |

| Memory leaks | m12-lifecycle | Where should cleanup happen? |

---

Trace Down โ†“

From design to implementation:

```

"Need single-owner heap data"

โ†“ Use: Box

"Need shared immutable data (single-thread)"

โ†“ Use: Rc

"Need shared immutable data (multi-thread)"

โ†“ Use: Arc

"Need to break reference cycle"

โ†“ Use: Weak

"Need shared mutable data"

โ†“ Single-thread: Rc>

โ†“ Multi-thread: Arc> or Arc>

```

---

Quick Reference

| Type | Ownership | Thread-Safe | Use When |

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

| Box | Single | Yes | Heap allocation, recursive types |

| Rc | Shared | No | Single-thread shared ownership |

| Arc | Shared | Yes | Multi-thread shared ownership |

| Weak | Weak ref | Same as Rc/Arc | Break reference cycles |

| Cell | Single | No | Interior mutability (Copy types) |

| RefCell | Single | No | Interior mutability (runtime check) |

Decision Flowchart

```

Need heap allocation?

โ”œโ”€ Yes โ†’ Single owner?

โ”‚ โ”œโ”€ Yes โ†’ Box

โ”‚ โ””โ”€ No โ†’ Multi-thread?

โ”‚ โ”œโ”€ Yes โ†’ Arc

โ”‚ โ””โ”€ No โ†’ Rc

โ””โ”€ No โ†’ Stack allocation (default)

Have reference cycles?

โ”œโ”€ Yes โ†’ Use Weak for one direction

โ””โ”€ No โ†’ Regular Rc/Arc

Need interior mutability?

โ”œโ”€ Yes โ†’ Thread-safe needed?

โ”‚ โ”œโ”€ Yes โ†’ Mutex or RwLock

โ”‚ โ””โ”€ No โ†’ T: Copy? โ†’ Cell : RefCell

โ””โ”€ No โ†’ Use &mut T

```

---

Common Errors

| Problem | Cause | Fix |

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

| Rc cycle leak | Mutual strong refs | Use Weak for one direction |

| RefCell panic | Borrow conflict at runtime | Use try_borrow or restructure |

| Arc overhead | Atomic ops in hot path | Consider Rc if single-threaded |

| Box unnecessary | Data fits on stack | Remove Box |

---

Anti-Patterns

| Anti-Pattern | Why Bad | Better |

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

| Arc everywhere | Unnecessary atomic overhead | Use Rc for single-thread |

| RefCell everywhere | Runtime panics | Design clear ownership |

| Box for small types | Unnecessary allocation | Stack allocation |

| Ignore Weak for cycles | Memory leaks | Design parent-child with Weak |

---

Related Skills

| When | See |

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

| Ownership errors | m01-ownership |

| Interior mutability details | m03-mutability |

| Multi-thread context | m07-concurrency |

| Resource lifecycle | m12-lifecycle |

More from this repository10

๐Ÿช
actionbook-rust-skills๐ŸชMarketplace

Comprehensive Rust development assistant with meta-question routing, coding guidelines, version queries, and ecosystem support

๐ŸŽฏ
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, dependencies, and potential impacts using Language Server Protocol (LSP) operations.

๐ŸŽฏ
m09-domain๐ŸŽฏSkill

Guides domain modeling in Rust by helping identify entities, value objects, aggregates, and their ownership patterns with domain-driven design principles.

๐ŸŽฏ
m05-type-driven๐ŸŽฏSkill

Enforces compile-time type safety by preventing invalid states through type-level design techniques like newtypes, type states, and phantom types.

๐ŸŽฏ
m13-domain-error๐ŸŽฏSkill

Designs comprehensive domain error handling strategies with categorization, recovery mechanisms, and contextual error management for different audiences.

๐ŸŽฏ
rust-learner๐ŸŽฏSkill

Retrieves and provides comprehensive Rust and crate information, including versions, features, documentation, and changelogs from authoritative sources.

๐ŸŽฏ
rust-trait-explorer๐ŸŽฏSkill

Explores Rust trait implementations, revealing which types implement specific traits and their implementation details using LSP.

๐ŸŽฏ
m04-zero-cost๐ŸŽฏSkill

Guides developers in choosing zero-cost abstractions by analyzing type system errors and runtime polymorphism needs in Rust.

๐ŸŽฏ
rust-call-graph๐ŸŽฏSkill

Generates and visualizes Rust function call graphs using LSP, revealing function relationships and call hierarchies.