> rust
Rust performance optimization guidelines. This skill should be used when writing, reviewing, or refactoring Rust code to ensure optimal performance patterns. Triggers on tasks involving memory allocation, ownership, borrowing, iterators, async code, or performance optimization.
curl "https://skillshub.wtf/pproenca/dot-skills/rust?format=md"Community Rust Best Practices
Comprehensive performance optimization guide for Rust applications. Contains 42 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.
When to Apply
Reference these guidelines when:
- Writing new Rust code
- Optimizing memory allocation and ownership patterns
- Working with iterators and collections
- Writing async code with Tokio or other runtimes
- Reviewing code for performance issues
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Memory Allocation | CRITICAL | mem- |
| 2 | Ownership & Borrowing | CRITICAL | own- |
| 3 | Data Structure Selection | HIGH | ds- |
| 4 | Iterator & Collection Patterns | HIGH | iter- |
| 5 | Async & Concurrency | MEDIUM-HIGH | async- |
| 6 | Algorithm Complexity | MEDIUM | algo- |
| 7 | Compile-Time Optimization | MEDIUM | comp- |
| 8 | Micro-optimizations | LOW | micro- |
Quick Reference
1. Memory Allocation (CRITICAL)
mem-avoid-unnecessary-clone- Avoid unnecessary clone callsmem-preallocate-vec-capacity- Preallocate Vec capacitymem-use-cow-for-conditional-ownership- Use Cow for conditional ownershipmem-use-arc-for-shared-immutable-data- Use Arc for shared immutable datamem-avoid-format-for-simple-concatenation- Avoid format! for simple concatenationmem-use-smallvec-for-small-collections- Use SmallVec for small collections
2. Ownership & Borrowing (CRITICAL)
own-accept-str-slice-not-string- Accept &str instead of &Stringown-accept-slice-not-vec- Accept &[T] instead of &Vec<T>own-use-into-for-flexible-ownership- Use Into<T> for flexible ownershipown-return-borrowed-when-possible- Return borrowed data when possibleown-use-asref-for-generic-borrows- Use AsRef<T> for generic borrows
3. Data Structure Selection (HIGH)
ds-use-hashset-for-membership- Use HashSet for membership testsds-use-hashmap-for-key-lookup- Use HashMap for key-value lookupsds-use-btreemap-for-sorted-iteration- Use BTreeMap for sorted iterationds-use-vecdeque-for-queue-operations- Use VecDeque for queue operationsds-use-entry-api-for-conditional-insert- Use Entry API for conditional insert
4. Iterator & Collection Patterns (HIGH)
iter-chain-instead-of-intermediate-collect- Chain iterators instead of intermediate collectiter-use-iter-over-into-iter-when-borrowing- Use iter() over into_iter() when borrowingiter-use-filter-map-for-combined-operations- Use filter_map for combined operationsiter-use-flat-map-for-nested-iteration- Use flat_map for nested iterationiter-use-extend-for-bulk-append- Use extend() for bulk appenditer-use-fold-for-accumulation- Use fold() for complex accumulation
5. Async & Concurrency (MEDIUM-HIGH)
async-avoid-blocking-in-async-context- Avoid blocking in async contextasync-use-join-for-concurrent-futures- Use join! for concurrent futuresasync-use-rwlock-over-mutex-for-read-heavy- Use RwLock over Mutex for read-heavyasync-minimize-lock-scope- Minimize lock scopeasync-use-buffered-for-bounded-concurrency- Use buffered() for bounded concurrencyasync-avoid-holding-lock-across-await- Avoid holding lock across await
6. Algorithm Complexity (MEDIUM)
algo-avoid-nested-loops-for-lookup- Avoid nested loops for lookupsalgo-use-binary-search-for-sorted-data- Use binary search for sorted dataalgo-use-sort-unstable-when-order-irrelevant- Use sort_unstable when order irrelevantalgo-use-select-nth-unstable-for-partial-sort- Use select_nth_unstable for partial sortalgo-use-chunks-for-batch-processing- Use chunks() for batch processing
7. Compile-Time Optimization (MEDIUM)
comp-use-const-for-compile-time-computation- Use const for compile-time computationcomp-prefer-static-dispatch- Prefer static dispatch over dynamiccomp-reduce-monomorphization-bloat- Reduce monomorphization bloatcomp-use-const-generics-for-array-sizes- Use const generics for array sizescomp-avoid-repeated-parsing-of-static-data- Avoid repeated parsing of static data
8. Micro-optimizations (LOW)
micro-use-inline-for-small-functions- Apply inline attribute to small hot functionsmicro-avoid-bounds-checks-in-hot-loops- Avoid bounds checks in hot loopsmicro-use-wrapping-arithmetic-when-safe- Use wrapping arithmetic when safemicro-use-byte-literals-for-ascii- Use byte literals for ASCII
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions - Category structure and impact levels
- Rule template - Template for adding new rules
Full Compiled Document
For a comprehensive guide with all rules in a single document, see AGENTS.md.
Reference Files
| File | Description |
|---|---|
| AGENTS.md | Complete compiled guide with all rules |
| references/_sections.md | Category definitions and ordering |
| assets/templates/_template.md | Template for new rules |
| metadata.json | Version and reference information |
> related_skills --same-repo
> valid-skill
A valid test skill with proper formatting. This skill should pass all validations and serves as a reference for the expected format.
> too-long-skill
This skill has more than 500 lines which should fail validation.
> missing-references
This skill references rules that do not have corresponding files in the references directory.
> missing-description
missing-description skill from pproenca/dot-skills