负责 Rust 语言特性的团队成员发起了 Keyword Generics Initiative,称此举旨在探索是否要为 Rust 添加关键字泛型。
"Initiative" 是 Rust 治理模式中的术语,与"working group"和"team"不同,其具有临时性质。"Initiative"存在的意义是为了探索、设计和实现特定的工作内容。一旦这项工作结束,临时组建的"Initiative"也就随之结束。
据介绍,虽然 Rust 支持泛型,但无法为其他常见的由关键字声明的事物添加泛型。例如使用 const
或async
的函数。
不过“关键字泛型”不仅仅是为了异步而设计,其最终目的是让其适用于所有修饰符关键字——包括可能将来才定义的关键字。总的来说,他们希望通过此次对“关键字泛型”的探索来填补这一空白:为const
和async
等关键字添加泛型的能力。
示例代码
async<A> trait Read {
async<A> fn read(&mut self, buf: &mut [u8]) -> Result<usize>;
async<A> fn read_to_string(&mut self, buf: &mut String) -> Result<usize> { ... }
}
/// Read from a reader into a string.
async<A> fn read_to_string(reader: &mut impl Read * A) -> std::io::Result<String> {
let mut string = String::new();
reader.read_to_string(&mut string).await?;
string
}
目前尚未有关于“关键字泛型”的 RFC 文档,团队成员称现在处于"pre-RFC"阶段。此外他们还表示,对于这项特性,即便保证兼容性是最困难的工作之一,但依然会最大限度地向后兼容。
相关讨论:Reddit | Lobsters