Ownership is the thing that most separates Rust from other programming languages. It's an idea that seems obvious at first, then surprisingly complicated, and finally powerful and useful. Ownership gives Rust its nearly-free automatic memory management, along with things such as safe and easy multithreading and concurrency, and just generally being able to spot more errors in the compiler than other languages can.
Borrowing makes use of ownership to create a safe version of one of the biggest problem points for other languages: accessing data via a memory address. Mistakes with memory addresses are one of the most common problems programs encounter and, in Rust, those mistakes are caught by the compiler and reported along with helpful hints about how to address them.
In this chapter, we also looked at how to implement consuming, read-only, or read-write functions...