🎯

m12-lifecycle

🎯Skill

from actionbook/rust-skills

VibeIndex|
What it does

Guides resource lifecycle design by analyzing creation, usage, cleanup strategies, and ownership patterns for efficient and safe resource management in Rust.

πŸ“¦

Part of

actionbook/rust-skills(35 items)

m12-lifecycle

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
665
-
AddedFeb 4, 2026

Skill Details

SKILL.md

"Use when designing resource lifecycles. Keywords: RAII, Drop, resource lifecycle, connection pool, lazy initialization, connection pool design, resource cleanup patterns, cleanup, scope, OnceCell, Lazy, once_cell, OnceLock, transaction, session management, when is Drop called, cleanup on error, guard pattern, scope guard, θ΅„ζΊη”Ÿε‘½ε‘¨ζœŸ, 连ζŽ₯ζ± , ζƒ°ζ€§εˆε§‹εŒ–, 衄源清理, RAII 樑式"

Overview

# Resource Lifecycle

> Layer 2: Design Choices

Core Question

When should this resource be created, used, and cleaned up?

Before implementing lifecycle:

  • What's the resource's scope?
  • Who owns the cleanup responsibility?
  • What happens on error?

---

Lifecycle Pattern β†’ Implementation

| Pattern | When | Implementation |

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

| RAII | Auto cleanup | Drop trait |

| Lazy init | Deferred creation | OnceLock, LazyLock |

| Pool | Reuse expensive resources | r2d2, deadpool |

| Guard | Scoped access | MutexGuard pattern |

| Scope | Transaction boundary | Custom struct + Drop |

---

Thinking Prompt

Before designing lifecycle:

  1. What's the resource cost?

- Cheap β†’ create per use

- Expensive β†’ pool or cache

- Global β†’ lazy singleton

  1. What's the scope?

- Function-local β†’ stack allocation

- Request-scoped β†’ passed or extracted

- Application-wide β†’ static or Arc

  1. What about errors?

- Cleanup must happen β†’ Drop

- Cleanup is optional β†’ explicit close

- Cleanup can fail β†’ Result from close

---

Trace Up ↑

To domain constraints (Layer 3):

```

"How should I manage database connections?"

↑ Ask: What's the connection cost?

↑ Check: domain-* (latency requirements)

↑ Check: Infrastructure (connection limits)

```

| Question | Trace To | Ask |

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

| Connection pooling | domain-* | What's acceptable latency? |

| Resource limits | domain-* | What are infra constraints? |

| Transaction scope | domain-* | What must be atomic? |

---

Trace Down ↓

To implementation (Layer 1):

```

"Need automatic cleanup"

↓ m02-resource: Implement Drop

↓ m01-ownership: Clear owner for cleanup

"Need lazy initialization"

↓ m03-mutability: OnceLock for thread-safe

↓ m07-concurrency: LazyLock for sync

"Need connection pool"

↓ m07-concurrency: Thread-safe pool

↓ m02-resource: Arc for sharing

```

---

Quick Reference

| Pattern | Type | Use Case |

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

| RAII | Drop trait | Auto cleanup on scope exit |

| Lazy Init | OnceLock, LazyLock | Deferred initialization |

| Pool | r2d2, deadpool | Connection reuse |

| Guard | MutexGuard | Scoped lock release |

| Scope | Custom struct | Transaction boundaries |

Lifecycle Events

| Event | Rust Mechanism |

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

| Creation | new(), Default |

| Lazy Init | OnceLock::get_or_init |

| Usage | &self, &mut self |

| Cleanup | Drop::drop() |

Pattern Templates

RAII Guard

```rust

struct FileGuard {

path: PathBuf,

_handle: File,

}

impl Drop for FileGuard {

fn drop(&mut self) {

// Cleanup: remove temp file

let _ = std::fs::remove_file(&self.path);

}

}

```

Lazy Singleton

```rust

use std::sync::OnceLock;

static CONFIG: OnceLock = OnceLock::new();

fn get_config() -> &'static Config {

CONFIG.get_or_init(|| {

Config::load().expect("config required")

})

}

```

---

Common Errors

| Error | Cause | Fix |

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

| Resource leak | Forgot Drop | Implement Drop or RAII wrapper |

| Double free | Manual memory | Let Rust handle |

| Use after drop | Dangling reference | Check lifetimes |

| E0509 move out of Drop | Moving owned field | Option::take() |

| Pool exhaustion | Not returned | Ensure Drop returns |

---

Anti-Patterns

| Anti-Pattern | Why Bad | Better |

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

| Manual cleanup | Easy to forget | RAII/Drop |

| lazy_static! | External dep | std::sync::OnceLock |

| Global mutable state | Thread unsafety | OnceLock or proper sync |

| Forget to close | Resource leak | Drop impl |

---

Related Skills

| When | See |

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

| Smart pointers | m02-resource |

| Thread-safe init | m07-concurrency |

| Domain scopes | m09-domain |

| Error in cleanup | m06-error-handling |

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-trait-explorer🎯Skill

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

🎯
m02-resource🎯Skill

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

🎯
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.