🎯

m04-zero-cost

🎯Skill

from actionbook/rust-skills

VibeIndex|
What it does

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

πŸ“¦

Part of

actionbook/rust-skills(35 items)

m04-zero-cost

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 generics, traits, zero-cost abstraction. Triggers: E0277, E0308, E0599, generic, trait, impl, dyn, where, monomorphization, static dispatch, dynamic dispatch, impl Trait, trait bound not satisfied, ζ³›εž‹, 特征, ι›Άζˆζœ¬ζŠ½θ±‘, ε•ζ€εŒ–"

Overview

# Zero-Cost Abstraction

> Layer 1: Language Mechanics

Core Question

Do we need compile-time or runtime polymorphism?

Before choosing between generics and trait objects:

  • Is the type known at compile time?
  • Is a heterogeneous collection needed?
  • What's the performance priority?

---

Error β†’ Design Question

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

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

| E0277 | "Add trait bound" | Is this abstraction at the right level? |

| E0308 | "Fix the type" | Should types be unified or distinct? |

| E0599 | "Import the trait" | Is the trait the right abstraction? |

| E0038 | "Make object-safe" | Do we really need dynamic dispatch? |

---

Thinking Prompt

Before adding trait bounds:

  1. What abstraction is needed?

- Same behavior, different types β†’ trait

- Different behavior, same type β†’ enum

- No abstraction needed β†’ concrete type

  1. When is type known?

- Compile time β†’ generics (static dispatch)

- Runtime β†’ trait objects (dynamic dispatch)

  1. What's the trade-off priority?

- Performance β†’ generics

- Compile time β†’ trait objects

- Flexibility β†’ depends

---

Trace Up ↑

When type system fights back:

```

E0277 (trait bound not satisfied)

↑ Ask: Is the abstraction level correct?

↑ Check: m09-domain (what behavior is being abstracted?)

↑ Check: m05-type-driven (should use newtype?)

```

| Persistent Error | Trace To | Question |

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

| Complex trait bounds | m09-domain | Is the abstraction right? |

| Object safety issues | m05-type-driven | Can typestate help? |

| Type explosion | m10-performance | Accept dyn overhead? |

---

Trace Down ↓

From design to implementation:

```

"Need to abstract over types with same behavior"

↓ Types known at compile time β†’ impl Trait or generics

↓ Types determined at runtime β†’ dyn Trait

"Need collection of different types"

↓ Closed set β†’ enum

↓ Open set β†’ Vec>

"Need to return different types"

↓ Same type β†’ impl Trait

↓ Different types β†’ Box

```

---

Quick Reference

| Pattern | Dispatch | Code Size | Runtime Cost |

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

| fn foo() | Static | +bloat | Zero |

| fn foo(x: &dyn Trait) | Dynamic | Minimal | vtable lookup |

| impl Trait return | Static | +bloat | Zero |

| Box | Dynamic | Minimal | Allocation + vtable |

Syntax Comparison

```rust

// Static dispatch - type known at compile time

fn process(x: impl Display) { } // argument position

fn process(x: T) { } // explicit generic

fn get() -> impl Display { } // return position

// Dynamic dispatch - type determined at runtime

fn process(x: &dyn Display) { } // reference

fn process(x: Box) { } // owned

```

Error Code Reference

| Error | Cause | Quick Fix |

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

| E0277 | Type doesn't impl trait | Add impl or change bound |

| E0308 | Type mismatch | Check generic params |

| E0599 | No method found | Import trait with use |

| E0038 | Trait not object-safe | Use generics or redesign |

---

Decision Guide

| Scenario | Choose | Why |

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

| Performance critical | Generics | Zero runtime cost |

| Heterogeneous collection | dyn Trait | Different types at runtime |

| Plugin architecture | dyn Trait | Unknown types at compile |

| Reduce compile time | dyn Trait | Less monomorphization |

| Small, known type set | enum | No indirection |

---

Object Safety

A trait is object-safe if it:

  • Doesn't have Self: Sized bound
  • Doesn't return Self
  • Doesn't have generic methods
  • Uses where Self: Sized for non-object-safe methods

---

Anti-Patterns

| Anti-Pattern | Why Bad | Better |

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

| Over-generic everything | Compile time, complexity | Concrete types when possible |

| dyn for known types | Unnecessary indirection | Generics |

| Complex trait hierarchies | Hard to understand | Simpler design |

| Ignore object safety | Limits flexibility | Plan for dyn if needed |

---

Related Skills

| When | See |

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

| Type-driven design | m05-type-driven |

| Domain abstraction | m09-domain |

| Performance concerns | m10-performance |

| Send/Sync bounds | m07-concurrency |

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.

🎯
rust-learner🎯Skill

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

🎯
m02-resource🎯Skill

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

🎯
rust-trait-explorer🎯Skill

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

🎯
rust-call-graph🎯Skill

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

🎯
m12-lifecycle🎯Skill

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