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 calls - •
mem-preallocate-vec-capacity- Preallocate Vec capacity - •
mem-use-cow-for-conditional-ownership- Use Cow for conditional ownership - •
mem-use-arc-for-shared-immutable-data- Use Arc for shared immutable data - •
mem-avoid-format-for-simple-concatenation- Avoid format! for simple concatenation - •
mem-use-smallvec-for-small-collections- Use SmallVec for small collections
2. Ownership & Borrowing (CRITICAL)
- •
own-accept-str-slice-not-string- Accept &str instead of &String - •
own-accept-slice-not-vec- Accept &[T] instead of &Vec<T> - •
own-use-into-for-flexible-ownership- Use Into<T> for flexible ownership - •
own-return-borrowed-when-possible- Return borrowed data when possible - •
own-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 tests - •
ds-use-hashmap-for-key-lookup- Use HashMap for key-value lookups - •
ds-use-btreemap-for-sorted-iteration- Use BTreeMap for sorted iteration - •
ds-use-vecdeque-for-queue-operations- Use VecDeque for queue operations - •
ds-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 collect - •
iter-use-iter-over-into-iter-when-borrowing- Use iter() over into_iter() when borrowing - •
iter-use-filter-map-for-combined-operations- Use filter_map for combined operations - •
iter-use-flat-map-for-nested-iteration- Use flat_map for nested iteration - •
iter-use-extend-for-bulk-append- Use extend() for bulk append - •
iter-use-fold-for-accumulation- Use fold() for complex accumulation
5. Async & Concurrency (MEDIUM-HIGH)
- •
async-avoid-blocking-in-async-context- Avoid blocking in async context - •
async-use-join-for-concurrent-futures- Use join! for concurrent futures - •
async-use-rwlock-over-mutex-for-read-heavy- Use RwLock over Mutex for read-heavy - •
async-minimize-lock-scope- Minimize lock scope - •
async-use-buffered-for-bounded-concurrency- Use buffered() for bounded concurrency - •
async-avoid-holding-lock-across-await- Avoid holding lock across await
6. Algorithm Complexity (MEDIUM)
- •
algo-avoid-nested-loops-for-lookup- Avoid nested loops for lookups - •
algo-use-binary-search-for-sorted-data- Use binary search for sorted data - •
algo-use-sort-unstable-when-order-irrelevant- Use sort_unstable when order irrelevant - •
algo-use-select-nth-unstable-for-partial-sort- Use select_nth_unstable for partial sort - •
algo-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 computation - •
comp-prefer-static-dispatch- Prefer static dispatch over dynamic - •
comp-reduce-monomorphization-bloat- Reduce monomorphization bloat - •
comp-use-const-generics-for-array-sizes- Use const generics for array sizes - •
comp-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 functions - •
micro-avoid-bounds-checks-in-hot-loops- Avoid bounds checks in hot loops - •
micro-use-wrapping-arithmetic-when-safe- Use wrapping arithmetic when safe - •
micro-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 |