【unitrix数间混合计算】2.11 二进制正整数特质(bin_pos.rs)
一、源码
这段代码定义了一个用于标记二进制正整数的类型系统特性(trait)
use crate::number::{Null, I, Bin, Bit, BinNonZero};/// 二进制正整数标记(底层实现)
pub trait BinPos: BinNonZero {}impl BinPos for Bin<Null, I> {} // 1
impl<H: BinPos, L: Bit> BinPos for Bin<H, L> {} // N+1位正整数
二、基础结构
use crate::number::{Null, I, Bin, Bit, BinNonZero};
引入了几个核心类型:
-
Null - 表示终止/空状态
-
I - 表示二进制位1
-
Bin - 二进制数的基本结构体
-
Bit - 位类型(O或I)
-
BinNonZero - 非零数的标记trait
三、特质定义
/// 二进制正整数标记(底层实现)
pub trait BinPos: BinNonZero {}
定义了一个名为 BinPos 的公共trait:
-
继承自 BinNonZero,表示所有实现这个trait的类型都是非零的
-
文档注释说明这是底层二进制实现
-
用于标记二进制正整数类型
四、具体实现
- 基本单位1
impl BinPos for Bin<Null, I> {} // 1
-
表示二进制数 1 的结构是 Bin<Null, I>
-
这是最小的正整数单位
-
实现了 BinPos 表示它是一个二进制正整数
- 递归定义
impl<H: BinPos, L: Bit> BinPos for Bin<H, L> {} // N+1位正整数
这是一个递归实现,表示:
-
如果高位 H 已经是二进制正整数(BinPos)
-
且低位 L 是一个有效位(Bit,即O或I)
-
那么 Bin<H, L> 也是一个二进制正整数
五、类型系统行为
这样的设计实现了:
-
类型安全:只有符合二进制正整数结构的类型才能实现 BinPos
-
递归验证:可以验证任意长度的二进制数是否为正整数
-
非零保证:通过 : BinNonZero 约束确保不会是零
六、示例说明
- 有效的 BinPos 类型:
-
Bin<Null, I> - 1 (0b1)
-
Bin<Bin<Null, I>, O> - 2 (0b10)
-
Bin<Bin<Bin<Null, I>, I>, I> - 7 (0b111)
- 无效的(不会实现 BinPos):
-
Bin<Null, O> - 0 (零)
-
Bin<Bin<Null, O>, I> - 非规范形式
这种设计常用于类型级编程,可以在编译期验证数值属性。