Rust 1.33 introduced a new concept, implemented as two types:
Pin<P>, a wrapper around a kind of pointer which makes that pointer "pin" its value in place, preventing the value referenced by that pointer from being moved.
Unpin, types that are safe to be moved, even if they're pinned.
Most users will not interact with pinning directly, and so we won't explain
more here. For the details, see the documentation for
What is useful to know about pinning is that it's a pre-requisite for
await. Folks who write async libraries may need to learn about
pinning, but folks using them generally shouldn't need to interact with this
feature at all.