You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
Ivan Tham e6b427ce38
Use a problem as the intro for newtype pattern (#153)
A problem can highlight some of the use cases of newtype
pattern rather than discussing generally that rust is strongly
typed. Make the user understand the need of newtype.
4 years ago
.github/workflows Checking links in markdown files (#150) 4 years ago
anti_patterns Fix internal links (#143) 4 years ago
functional Table alignment in functional/index.md (#152) 4 years ago
idioms Use coercion for arguments (#29) 4 years ago
patterns Use a problem as the intro for newtype pattern (#153) 4 years ago
refactoring Link DRY to wikipedia (#154) 4 years ago
.env Adding mdbook configuration and deployment to gh-pages (#111) 4 years ago
.gitignore Adding mdbook configuration and deployment to gh-pages (#111) 4 years ago
CONTRIBUTING.md Add explanation how to test the book to contributing (#139) 4 years ago
LICENSE Initial commit 9 years ago
README.md README: remove Table of Contents (#144) 4 years ago
SUMMARY.md Use coercion for arguments (#29) 4 years ago
additional_resources.md Adding Nick Camerons talk at PDXRust 2016 to additional resources section (#102) 4 years ago
book.toml Adding mdbook configuration and deployment to gh-pages (#111) 4 years ago
intro.md Fix internal links (#143) 4 years ago
template.md Adding Contribution guide (#123) 4 years ago

README.md

Rust Design Patterns

An open source book about design patterns and idioms in the Rust programming language that you can read here.

TODOs

Idioms

  • TODO stability for extensibility
  • TODO trait to separate visibility of methods from visibility of data (https://github.com/sfackler/rust-postgres/blob/v0.9.6/src/lib.rs#L1400)
  • 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")
  • TODO interior mutability - UnsafeCell, Cell, RefCell
  • TODO FFI usage (By being mindful of how to provide Rust libraries, and make use of existing libraries across the FFI, you can get more out of benefits Rust can bring)

Design patterns

Anti-patterns

  • TODO thread + catch_panic for exceptions
  • TODO Clone to satisfy the borrow checker
  • TODO Matching all fields of a struct (back compat)
  • TODO wildcard matches
  • TODO taking an enum rather than having multiple functions
  • TODO unwrap()ing every Result instead of forwarding it

Contributing

You are missing content in this repository that can be helpful for others and you are eager to explain it? Awesome! We are always happy about new contributions (e.g. elaboration or corrections on certain topics) to this project.

We suggest reading our Contribution guide to get more information on how it works.

Building with mdbook

This book is built with mdbook. You can install it by running cargo install mdbook.

If you want to build it locally you can run one of these two commands in the root directory of the repository:

  • mdbook build

    Builds static html pages as output and place them in the /book directory by default.

  • mdbook serve

    Serves the book at http://localhost:3000 (port is changeable, take a look at the terminal output to be sure) and reloads the browser when a change occurs.

License

This content of this repository is licensed under MPL-2.0; see LICENSE.