主要观点:
- 解释了
Future::poll
方法中self: Pin<&mut Self>
出现在签名中的原因,通过示例说明在不同情况下如何使用Pin
以及其与impl Trait
等的关系。 - 探讨了
Pin
在方法签名中的影响,对于希望与固定值一起工作的特性,需使用self: Pin<&mut Self>
,如Iterator
需引入新特性PinnedIterator
,这导致了大量的特性重复。 - 提出了关于广义自引用类型设计的一些要点,如标记类型不可移动、转换类型移动性等,并介绍了相关的设计,如
Move
自动特性等。
关键信息:
Pin
可用于表达类型在固定后可实现特定特性,如for<'a> Pin<&'a mut T>: MyTrait
。- 在
MyTrait::my_method
中self
的类型为&mut Pin<&mut Self>
,可通过Pin::as_mut
转换为拥有类型。 - 对于
impl Trait
在关联位置和返回位置的使用限制,以及Pin
直接作为方法签名的一部分的解决方案。 - 以
Iterator
为例,说明为了支持固定值,需引入新特性PinnedIterator
,导致特性重复。 - 强调
Pin
与std::lib
的严格向后兼容性要求之间的相互作用,以及对设计广义自引用类型的启示。
重要细节:
- 展示了通过
my_function
函数示例说明Pin
的使用和转换,如let pinned_input = pin!(input)
。 - 提到
PoignardAzur
的相关工作,如描述固定类型的原地构造等。 - 指出在讨论
Pin
的可行性时应考虑这些影响,鼓励分享其他可能的方法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。