An Incoherent Rust
2 months ago
- #Coherence
- #Rust
- #Ecosystem
- Rust生态面临基础库(如serde)的挑战,这些库要求在整个生态系统中为类型实现特质(trait),这使得引入替代方案变得困难。
- Rust的连贯性(coherence)和孤儿规则强制规定:一个类型对某个特质只能实现一次,这避免了实现重叠并保证了类型安全。
- 现有放宽连贯性和孤儿规则的提案(如二进制包豁免、延迟连贯性、特化等)都存在局限性,无法完全解决生态演进问题。
- 一项激进提案建议通过引入命名实现(named impls)和特质约束参数来取消连贯性,在保持类型安全的同时允许实现重叠。
- 这种方法可能实现非连贯特质(incoherent traits),即同一类型可以存在多个特质实现,从而解决生态演进难题。
- 该提案还探讨了对类型安全的影响、HashMap问题,以及在此模型中类型约束与实现约束的区别。
- 潜在优势包括解决生命周期依赖的特化问题、提升类型系统安全性,以及支持效果系统等新语言特性。
- 向该模型过渡需要重大的编译器改造和语言设计工作,包括命名实现的语法设计和迁移策略制定。