Pin and Unpin
Self-referential state machines (a future that contains a reference to its own field) cannot be moved in memory.
Pin<&mut Self> prevents the runtime from moving the future once it's been polled.
Most futures are Unpin (moving them is safe); the compiler inserts Pin automatically where needed.
In practice: use pin_mut! or Box::pin() when you need to store a future and await it later.