1. 1. Cover
  2. 2. Introduction
  3. 3. Types
    1. 3.1. Item 1: Use the type system to express your data structures
    2. 3.2. Item 2: Use the type system to express common behaviour
    3. 3.3. Item 3: Avoid matching Option and Result
    4. 3.4. Item 4: Prefer idiomatic Error variants
    5. 3.5. Item 5: Familiarize yourself with standard traits
    6. 3.6. Item 6: Understand type conversions
    7. 3.7. Item 7: Embrace the newtype pattern
    8. 3.8. Item 8: Use builders for complex types
    9. 3.9. Item 9: Familiarize yourself with reference and pointer types
    10. 3.10. Item 10: Consider using iterator transforms instead of explicit loops
    11. 3.11. Item 11: Implement the Drop trait for RAII patterns
    12. 3.12. Item 12: Prefer generics to trait objects
    13. 3.13. Item 13: Use default implementations to minimize required trait methods
  4. 4. Concepts
    1. 4.1. Item 14: Understand lifetimes
    2. 4.2. Item 15: Understand the borrow checker
    3. 4.3. Item 16: Avoid writing unsafe code
    4. 4.4. Item 17: Be wary of shared-state parallelism
    5. 4.5. Item 18: Don't panic
    6. 4.6. Item 19: Avoid reflection
    7. 4.7. Item 20: Avoid the temptation to over-optimize
  5. 5. Dependencies
    1. 5.1. Item 21: Understand what semantic versioning promises
    2. 5.2. Item 22: Minimize visibility
    3. 5.3. Item 23: Avoid wildcard imports
    4. 5.4. Item 24: Re-export dependencies whose types appear in your API
    5. 5.5. Item 25: Manage your dependency graph
    6. 5.6. Item 26: Be wary of feature creep
  6. 6. Tooling
    1. 6.1. Item 27: Document public interfaces
    2. 6.2. Item 28: Use macros judiciously
    3. 6.3. Item 29: Listen to Clippy
    4. 6.4. Item 30: Write more than unit tests
    5. 6.5. Item 31: Take advantage of the tooling ecosystem
    6. 6.6. Item 32: Set up a continuous integration (CI) system
  7. 7. Beyond Standard Rust
    1. 7.1. Item 33: Consider making library code no_std compatible
    2. 7.2. Item 34: Control what crosses FFI boundaries
    3. 7.3. Item 35: Prefer bindgen to manual FFI mappings
  8. 8. Index

Effective Rust





Effective Rust

35 Specific Ways to Improve Your Rust Code



David Drysdale