我正在开展一个项目,在 Rust 中构建一个位向量类型,并且正在探索是否可以使用不等式界限来约束常量泛型。
我的目标是设计一个 API,通过使用基于 const 泛型的编译时保证以及运行时检查的变体来避免运行时边界检查。我希望这些函数足够简单,以便编译器可以内联它们,从而实现真正的零成本抽象。
下面是一个简化的代码示例,演示了我想要做的事情。这段代码无法编译,但它显示了我想要的约束类型:
/// Idea: A function with multiple generic parameters where a
/// trait bound is used to establish an ordering between them.
fn add_ordered<const N1: usize, const N2: usize>() -> usize
where N2 > N1 {
N1 + N2
}
fn main() {
let n = add_ordered::<1, 2>();
println!("{n}");
}
如果我删除 where N2 > N1 子句,代码可以编译,但它不会支持我在这里试图保留的不变量类型(在本例中,N2 大于 N2)。
我的问题:
- Rust 中目前是否有办法编写类似的 const 泛型约束
where N2 > N1
? - 如果没有,是否有任何解决方法或语言功能(夜间或其他)可以实现类似功能?
- 如果现在真的没有办法做到这一点,除了还没实现之外,还有什么理由不能实现吗?这会不会成为潜在的 RFC?
我搜索了一些资料,但没找到太多相关信息。如有任何指点或解释,我将不胜感激。谢谢!