这篇文章深入探讨了 Rust 异步生态系统中的基础构建块 Pin。作者首先阐述了 Pin 的作用:防止自引用类型在移动时导致的内存安全问题。接着,作者详细解释了 Pin 的设计理念,包括其前身 Move trait 的局限性以及 Pin 如何通过包装指针和引入 Unpin trait 来解决这些问题。文章还分析了 Pin 的可用性问题,例如重新借用、特殊 API 和 Pinned projections 等方面,并指出了这些问题源于 Pin 作为一个纯粹的库类型缺乏语言层面的语法支持。最后,作者展望了改进 Pin 的方向,即引入 Pinned places 的概念。