主要观点:不稳定的gen {}特性存在应返回Iterator还是IntoIterator的疑问,作者深入研究后发现gen返回Iterator会导致自动特质泄漏问题,即gen内部创建的!Send类型会影响到外部可发送性,而返回IntoIterator可避免此问题。
关键信息:
thread::spawnAPI 中闭包和返回类型需为Send,但未提及内部创建的局部值也需为Send。gen {}块创建的迭代器在内部创建!Send类型(如std::rc::Rc)时,会导致迭代器不可发送,即使迭代未开始。- 让
gen {}返回impl IntoIterator + Send可避免自动特质泄漏,for..in操作IntoIterator,gen {}用于创建迭代效果实例。 - 此问题主要影响使用生成器转换的效果(如迭代和异步),不仅影响
Send,未来可能也影响其他自动特质,如Sync、Freeze等。
重要细节: - 给出
thread::spawn示例,展示gen内部!Send类型导致的发送线程错误。 - 解释
IntoIterator作为gen {}返回类型的合理性及与for..in的关系。 - 提及
async {}可能应返回IntoFuture以避免自动特质泄漏,且当前更改存在障碍。 - 讨论了
IntoIterator名称的不足之处及可借鉴 Swift 的 trait 命名方案。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。