🎯

m04-zero-cost

🎯Skill

from goooice/rust-skills

VibeIndex|
What it does

Guides developers in choosing zero-cost abstractions by analyzing type system constraints and performance trade-offs in Rust generics and traits.

πŸ“¦

Part of

goooice/rust-skills(35 items)

m04-zero-cost

Installation

Add MarketplaceAdd marketplace to Claude Code
/plugin marketplace add ZhangHanDong/rust-skills
Install PluginInstall plugin from marketplace
/plugin install rust-skills@rust-skills
Quick InstallInstall with npx
npx skills add ZhangHanDong/rust-skills
git cloneClone repository
git clone https://github.com/ZhangHanDong/rust-skills.git
πŸ“– Extracted from docs: goooice/rust-skills
4Installs
-
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

🎯
m14-mental-model🎯Skill

Applies the M14 mental model framework to enhance decision-making and strategic thinking through structured cognitive analysis.

🎯
m10-performance🎯Skill

Optimizes code performance by identifying bottlenecks, measuring impact, and guiding strategic improvements across algorithm, data structure, and memory efficiency.

🎯
meta-cognition-parallel🎯Skill

Performs parallel three-layer meta-cognitive analysis by forking subagents to simultaneously analyze language mechanics, design choices, and domain constraints, then synthesizing results.

🎯
unsafe-checker🎯Skill

Identifies and reviews unsafe Rust code patterns, FFI risks, and potential memory unsafety in Rust projects.

🎯
rust-skill-creator🎯Skill

Dynamically generates Claude skills for Rust crates, standard library modules, and documentation by extracting and processing technical details from specified URLs.

🎯
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, checking conflicts, and applying changes across project files using LSP.

🎯
m03-mutability🎯Skill

Diagnoses and guides resolution of Rust mutability and borrowing conflicts by analyzing ownership, mutation patterns, and thread-safety requirements.

🎯
domain-iot🎯Skill

Enables building robust, efficient IoT applications with offline-first design, power-aware networking, and secure device communication using Rust.

🎯
m05-type-driven🎯Skill

Explores and demonstrates type-driven development techniques in Rust, showcasing advanced type system features and pattern matching strategies.