Pin and Unpin are two of the most conceptually difficult parts of Rust. They exist to support self-referential structs and async state machines – understanding them demystifies how async Rust works under the hood and when you actually need to think about them.