While unsafe is one way to enable easier solutions to sometimes tricky situations, this book (https://rust-unofficial.github.io/too-many-lists/index.html) describes the limitations of safe programming perfectly with something as simple as a linked list.
Rust is a safe programming language, which means that the compiler makes sure that all the memory is accounted for. Thus, it is impossible for programs to obtain multiple mutable references to the same memory address, use memory after it has been freed, or incorrect type safety, among other things. This lets Rust avoid undefined behavior. For some limited use cases, however, these constraints prohibit valid use cases, which is why unsafe loosens some of these guarantees to ...