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

相关讨论:Reddit | Lobsters


相關推薦

2023-01-24

### 2023.01.22 Ver X38.1 * LiteIDE * gotools & gocode support Go1.18 generics * support build for windows vs2019 * support build for freebsd/openbsd * fix memory leak * GolangCode * support Go1.18 generics * remove options and default set * uncheck GOPATH for set-lib * LiteEnv * fix memory lea

2023-02-14

support typeparams * LiteDebug * add disassemble view * DlvDebugger * fix generics func sync * fix dlv process exit on windows * refactor gorountines model * support disassemble model * LiteBuild * gosrc.xml TARGETNAME use BUILD_DIR_PATH * GolangEdit * support any and comparable * GolangCode * supp

2023-02-05

序时,我们已经做好准备。这种探索也可能有助于向 Rust 社区提供一些可推进此计划进行的语言特性的信息。但目前可以明确的是,我们的目标计划还没有包括将现有的 Vulkan 驱动程序转换为 Rust。” 他还提交了一份合并请求草

2022-07-28

sp; - Self 类型 PEP 646  - 可变参数泛型 (Variadic Generics) PEP 680 - tomllib:支持在标准库中解析 TOML PEP 675 - 任意文字字符串类型 PEP 655 - 将单个 TypedDict 项目标记为必需或可能缺失 bpo-46752 – 将任务组引

2022-07-26

能轻松地从 C++ 迁移到 Carbon。 Carbon 亮点: Introducer 关键字和简单语法 函数输入参数为只读值 指针提供间接访问和变体 使用表达式来命名类型 软件包为 root 命名空间 通过包名导入 API 用显式对象参数进行方法声明

2023-04-29

Windows 不会很快发生,但微软对 Rust 的支持或使开源社区受益。开源软件开发者、现任 Sentry 安全工程师 Armin Ronacher 认为,微软对 Rust 的承诺对这门语言来说非常重要。 “特别是,因为我希望微软重用现有的编译器,我希

2024-02-28

的,但从 Linkerd 2.15 开始,稳定的 Linkerd 发布将由供应商社区负责。 这不仅包括 Linkerd 2.15.0,还包括即将推出的 Linkerd 2.15.1 这样的 point releases、即将推出的 2.16.0 这样的重大版本,以及即将推出的 Linkerd 2.14.11 这样的 backports 版

2022-04-09

增] select 组件 search 事件, 搜索回调。 [新增] select 组件 keyword 属性, 提供关键词检索。 [新增] upload 组件 cut cutOptions 属性, 支持上传裁剪。 [新增] timeline 组件 direction 属性, 支持垂直与水平布局。 [新增] dropdown 组件 open 与 hide 事

2022-08-10

sp; - Self 类型 PEP 646  - 可变参数泛型 (Variadic Generics) PEP 680 - tomllib:支持在标准库中解析 TOML PEP 675 - 任意文字字符串类型 PEP 655 - 将单个 TypedDict 项目标记为必需或可能缺失 bpo-46752 – 将任务组引

2022-06-02

pt* PEP 673  - Self 类型 PEP 646  - 可变参数泛型 (Variadic Generics) PEP 680 - tomllib:支持在标准库中解析 TOML PEP 675 - 任意文字字符串类型 PEP 655 - 将单个 TypedDict 项目标记为必需或可能缺失 bpo-46752 – 将任务组引入 asyncio PE

2022-05-09

sp; - Self 类型 PEP 646  - 可变参数泛型 (Variadic Generics) PEP 680 - tomllib:支持在标准库中解析 TOML PEP 675 - 任意文字字符串类型 PEP 655 - 将单个 TypedDict 项目标记为必需或可能缺失 bpo-46752 – 将任务组引

2022-07-13

sp; - Self 类型 PEP 646  - 可变参数泛型 (Variadic Generics) PEP 680 - tomllib:支持在标准库中解析 TOML PEP 675 - 任意文字字符串类型 PEP 655 - 将单个 TypedDict 项目标记为必需或可能缺失 bpo-46752 – 将任务组引

2022-02-28

包括:引入解构式赋值、默认关闭增量编译,以及 Const 泛型参数支持设置默认值等。 内联汇编 (Inline assembly) 此项特性的使用场景主要是控制底层执行,或者访问特定的机器指令。 例如面向 x86-64 目标平台进行编译时

2022-09-14

sp; - Self 类型 PEP 646  - 可变参数泛型 (Variadic Generics) PEP 680 - tomllib:支持在标准库中解析 TOML PEP 675 - 任意文字字符串类型 PEP 655 - 将单个 TypedDict 项目标记为必需或可能缺失 bpo-46752 – 将任务组引