mirror of
https://github.com/rust-unofficial/patterns
synced 2024-11-16 12:13:24 +00:00
244aedbfae
Make "RAII" uppercase so that the link can be followed
2.4 KiB
2.4 KiB
Rust Design Patterns
An open source repository of design patterns and idioms in the Rust programming language.
Contents
Idioms
- Constructor
- Concatenating strings with
format!
- TODO private field to indicate extensibility
- TODO trait to separate visibility of methods from visibility of data (https://github.com/sfackler/rust-postgres/blob/master/src/lib.rs#L1400)
- Collections are smart pointers
- TODO leak amplification ("Vec::drain sets the Vec's len to 0 prematurely so that mem::forgetting Drain "only" mem::forgets more stuff. instead of exposing uninitialized memory or having to update the len on every iteration")
- Finalisation in destructors
- TODO interior mutability - UnsafeCell, Cell, RefCell
- TODO treating Option like a list
Design patterns
- Builder
- RAII guards
- Newtype
- TODO iterators (to safely avoid bounds checks)
- TODO closures and lifetimes (coupling to lifetime)
- TODO platform-specific sub-modules (https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md#platform-specific-opt-in)
- TODO affine types/session types
- Entry API
- TODO visitor
- TODO fold
- TODO small crates and semver
- TODO extension traits
- TODO destructor bombs (ensure linear typing dynamically, e.g.,
0f25ccb7c3
) - TODO convertible to Foo trait for more generic generics (e.g., http://static.rust-lang.org/doc/master/std/fs/struct.File.html#method.open)
- Late bound bounds
- TODO 'shadow' borrowed version of struct - e.g., double buffering, Niko's parser generator
- TODO composition of structs to please the borrow checker
Anti-patterns
- TODO thread + catch_panic for exceptions
- TODO Clone to satisfy the borrow checker
- TODO Deref polymorphism
- TODO Matching all fields of a struct (back compat)
- TODO wildcard matches
- TODO taking an enum rather than having multiple functions
Contributing
Contributions are very welcome!
You should start with the template. Copy it into the appropriate directory, edit it, and submit a PR. You might not want every section, and you might want to add extra sections.
Correction and elaboration PRs are very welcome.