# Why Rust?
Rust eliminates bugs related to invalid data access. These bugs stand for 70% of all reportedly.
Rust is memory-safe without imposing any runtime costs.
Other languages can also be safe, but require runtme checks that slows them down. Rust provides both safety and control.
- no dangling pointers
- no data races (inability to determine how a program will behave from run to run). Rust will not allow to modify variable in different threads.
- no buffer overflow (accessing array elements at index that doesn't exist)
- no iterator invalidation - changing a thing being iterated midway through
- no integer overflow in debug mode
Sometimes a term "fearless concurrency" is used to express the safety that Rust gives to programmers.
Data within Rust is immutable by default.
Rust provides very informative error messages. There is no Garbage Collector
Programmers have control over how data structures are laid out in memory and how they're accessed. There are some sensible defaults as well.
- Data may be stored on a "stack" or on the "heap".
- "Reference counting" might be added.
- Own types of pointers might be created for a particular access pattern.
Rust is not good with cyclic data structures. Implementing doubly-linked list might not be easy for a beginner in Rust.
The compilation is slower than in peer languages.
Rust has steep learning curve due to it being "large". Lots of functionalities, keywords, etc.
Every two or three years a new Edition of Rust comes out. Additionally, smaller changes are released every 6 weeks.