Understanding the machine.
Every piece of data has a single owner. When the owner goes out of scope, the memory is freed. This guarantees memory safety without GC.
You can lend data to functions safely. The compiler ensures you don't use it after you've lent it out, preventing race conditions.
Defining shared behavior. Similar to interfaces, but more powerful. Use them to write generic, reusable code.