There are also rules about mutability in Rust, that prevent data races between threads. Let's see them:
- All bindings are immutable by default
- There can be unlimited immutable borrows of a binding at the same time
- There can only be one mutable borrow of a binding at most at a given point in time
- If there is a mutable borrow, no immutable borrows can coexist at a given point in time
They are fairly simple to understand. You can read the contents of a binding from as many places as you would like, but if you want to modify a binding, you must somehow ensure that no readers or other writers exist. This, of course, prevents data races, but makes your coding a bit more troublesome.
Let's see this with a couple ...