What this otherwise excellent blog post neglects to mention is that "pinning" didn't exist in Rust as of its 1.0 release; it was only added much later, and IMO it's still very complex and hard to understand (which also explains why the author of this blog post glossed over it). It's a workaround for the fact that Rust moves are "just memcpy()" and therefore do not call any custom per-type code (which could be used to fixup any references after the move).