Lang 团队设计会议:良好形式和类型别名

2020年7月29日 · Niko Matsakis 代表 lang 团队

你好! 你知道 lang 团队 现在有定期设计会议了吗? 我们利用这些会议来深入研究活跃项目组的产出。 会议结束后,我们通常会将录像发布到 YouTube,并将一些 会议记录发布到 lang-team 仓库。 我想写一篇快速更新,列出我们最近举行的一些会议以及即将举行的一些会议。

这篇博文是关于我们在 2020-07-29 举行的会议。 我们讨论了尝试强制执行类型别名的“良好形式”规则的想法,多年来这个想法一直时隐时现。

背景是,编译器当前的规则将类型别名展开,就好像它们是一种宏,这意味着我们最终不会强制执行许多关于它们的规则。

例如,以下类型别名定义是合法的,即使使用它会导致错误

struct MyType<T: Display> { t: T }

// This alias, perhaps, should err, as `Vec<u32>: Display`
// does not hold:
type MyAlias = MyType<Vec<u32>>;

有关更多信息,请查看会议记录观看录像。我们涵盖了许多出错的示例,以及我们可能想要达到的各种可能的“最终状态”(例如,有一种观点认为,上面的示例毕竟应该被接受,也许会发出警告)。

会议期间的结论是,我们目前不会在类型别名上投入大量精力,特别是我们不会以任何版本相关的迁移和硬性错误为目标,但我们会接受引入警告的 PR,这些警告针对的是总是会导致错误的类型别名定义。(就像在会议中发生的任何结论一样,如果我们遇到改变我们想法的新证据,可能会对其进行修改。)