主要观点:长期关注如何为 Rust 编程语言添加可变参数泛型,当前讨论激烈且一些观点反复出现,此文旨在提前阻止某些观点。
关键信息:
- 介绍了可变参数(variadic)在编程中的含义,以及 Rust 中的可变参数泛型示例,如实现 trait 等。
提出三个常被提及的关于可变参数泛型的提案并分析其不可行性:
- 仅使用迭代器:无法保证元组成员实现特定 trait,映射元组也很繁琐,不能实现如
Clone
等常用 trait。 - 可变递归:使用递归实现会导致编译器需进行大量内联和符号生成,元组解构与引用配合不佳,元组解构/连接难以表示,关联类型过于不透明,开发体验差。
- 一流类型:会带来大量后单态化错误,不利于类型推断,且 Rust 维护者不想重写整个语言。
- 仅使用迭代器:无法保证元组成员实现特定 trait,映射元组也很繁琐,不能实现如
- 总结可变参数泛型的核心用例及所需最小特征,指出类似提案不可行,得到 Josh Triplett 和 oli-obk 的支持,作者将撰写 RFC 并期待相关工作开始。
重要细节: - 文中通过多个代码示例详细阐述各个提案的问题,如
Tuple
特质的使用、不同 trait 的实现等。 - 提及相关讨论的链接Discussion on r/rust.。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。