Rust 计划废除 Pin,引入 Move 特质
Rust project goals: Immobile types and guaranteed destructors
Rust 社区正式提出了一项激进的语言演进计划,旨在解决长期困扰开发者的 Pin 机制复杂性。该提案计划引入 Move、Destruct 和 Forget 等新特质,让类型能够主动选择是否允许被移动或遗忘。这意味着不可移动的类型将不再依赖 Pin 这种基于“位置”的复杂约束,而是直接成为类型本身的属性。这一变革将彻底简化自引用类型的实现,并为 Linux 内核等系统级项目铺平道路,同时让安全的 scoped spawn 模式成为可能。Rust 团队明确表示,长远目标是完全弃用 Pin,通过更直观的特质系统重构类型能力模型。
与其试图修改语言让 Pin 机制正常工作,我们认为问题恰恰出在 Pin 本身,因此应该改进 Rust 中不可移动类型的编码方式。
HN 评论区
101- panstromek
给所有不了解背景的朋友提个醒:这还不是一个被正式采纳的语言变更。它只是一个项目目标,意味着大家同意着手去做,但具体设计可能会有重大调整,甚至完全被放弃(不过说实话,针对这个项目目标,这种情况不太可能发生)。
- stymaar
好消息!自 2016 年左右起,大家就意识到不可移动类型(immovable types)是 Rust 中一个至关重要的缺失部分,但长期以来人们认为,如果不破坏现有的一切就无法添加它们,所以我们最终搞出了 Pin 这个权宜之计。
我很高兴他们最终找到了添加它的方法,因为这确实填补了语言中一个显眼的漏洞。
- yccs27
@withoutboats 提出了一个不同的方案,让不可移动性成为位置(place)或引用的属性,而不是类型的属性:
https://without.boats/blog/pinned-places/
这个项目目标是否意味着 Rust 维护者已经决定实现 @yoshuawuyts 的不可移动类型提案,而不是 pinned places?
- skitter
更多代数效应(algebraic effects)被硬塞进 Rust 里了。
- dorjoy
给我来点解放性的约束吧。下一个就干掉 panic 吧。