Rust 社区探索关键字泛型 (Keyword Generics)

负责 Rust 语言特性的团队成员发起了 Keyword Generics Initiative,称此举旨在探索是否要为 Rust 添加关键字泛型

"Initiative" 是 Rust 治理模式中的术语,与"working group"和"team"不同,其具有临时性质。"Initiative"存在的意义是为了探索、设计和实现特定的工作内容。一旦这项工作结束,临时组建的"Initiative"也就随之结束。

据介绍,虽然 Rust 支持泛型,但无法为其他常见的由关键字声明的事物添加泛型。例如使用 constasync的函数。

不过“关键字泛型”不仅仅是为了异步而设计,其最终目的是让其适用于所有修饰符关键字——包括可能将来才定义的关键字。总的来说,他们希望通过此次对“关键字泛型”的探索来填补这一空白:为constasync等关键字添加泛型的能力。

示例代码

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"阶段。此外他们还表示,对于这项特性,即便保证兼容性是最困难的工作之一,但依然会最大限度地向后兼容。

相关讨论:RedditLobsters

猜你喜欢

转载自www.oschina.net/news/204967/rust-keyword-generics