Rust 泛型常量参数:GCA 让 const 泛型支持表达式
来源: blog.rust-lang.org — 2026-10-02
概述
Rust 常量泛型项目组发布泛型常量参数(Generic Const Arguments,GCA)特性家族,用来取代旧的 generic_const_exprs。稳定版此前只允许裸泛型参数或完全常量的写法,而 GCA 让结构体、数组、元组、常量项等表达式得以进入常量泛型,代价是所有新表达式必须写在 gca! 宏里。
核心要点
- 稳定版只支持裸泛型参数(如 { N })或全常量表达式(如 { 1 + 1 }),像 [u8; T::NUM_BYTES] 这样的写法一直不可用,人们只能退而使用 typenum。
- gca_adts 支持结构体、枚举、数组与元组表达式;目前尚不支持数组重复表达式,但计划补上。
- 所有新支持的表达式都必须写进 gca! 宏,项目组承认这带来严重的人机工程学问题,暂时没有好解法。
- gca!(..) 内允许引用泛型参数(普通常量参数不允许),但支持的表达式种类更少,暂不支持算术与函数调用。
- gca_const_items 让常量项进入类型系统,并支持关联常量约束与含关联常量的 dyn 类型;还提供无需 -Znext-solver 的最小版 gca_min_const_items。
金句
这让编译器能确定 FREE_GCA:: 与 N 等价,因此类型 [u8; N] 与 [u8; FREE_GCA::] 是相同的。
👍 0
👎 0
← 返回 Lobsters 首页