一、源碼
這是一個使用 Rust 類型系統實現類型級(type-level)二進制數的設計。
//! 類型級二進制數表示方案(第二套方案)
//!
//! 使用嵌套泛型結構體表示二進制數,支持整數和小數表示。use crate::sealed::Sealed;/// 類型級二進制數結構體
///
/// # 泛型參數說明
/// - `H`: 高位部分
/// - `I` 表示高位為1
/// - `O` 表示高位為0
/// - `B<H, L>` 表示嵌套的高位
/// - `Null` 僅用于頂層結構,表示無更高位
/// - `L`: 低位部分
/// - `I` 表示低位為1
/// - `O` 表示低位為0
/// - `B<H, L>` 表示小數部分
/// - `Null` 僅用于頂層結構,表示無小數部分
///
/// # 表示規則
/// - 整數部分使用嵌套的B結構體表示
/// - 小數部分通過低位的B結構體表示
/// - 規范化表示要求嵌套的B結構體高位不能為Null
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub struct B<H, L>(pub H, pub L);/// 空類型標記,用于表示無更高位或無小數部分
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Debug, Default)]
pub struct Null;impl Null {/// 創建新的Null實例#[inline(always)]pub const fn new() -> Self {Null}
}impl<H: Default, L: Default> Default for B<H, L> {fn default() -> Self {B(Default::default(), Default::default())}
}impl<H, L> B<H, L> {/// 創建新的二進制數實例#[inline]pub fn new(h: H, l: L) -> Self {B(h, l)}
}/// 類型級比特位0(邏輯假)
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Debug, Default)]
pub struct O;impl O {/// 創建新的O實例#[inline(always)]pub const fn new() -> Self {Self}
}/// 類型級比特位1(邏輯真)
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Debug, Default)]
pub struct I;impl I {/// 創建新的I實例#[inline(always)]pub const fn new() -> Self {I}
}// 為類型實現密封標記
impl<H, L> Sealed for B<H, L> {}
impl Sealed for O {}
impl Sealed for I {}
impl Sealed for Null {}
二、源碼分析
- 核心設計理念:
-
使用泛型結構體 B<H, L> 表示二進制數,其中 H 是高位,L 是低位
-
通過類型組合來表示任意長度的二進制數
-
支持整數和小數的表示
- 主要類型定義:
pub struct B<H, L>(pub H, pub L);
-
二元組結構體,H 表示高位,L 表示低位
-
可以嵌套使用來表示多位二進制數
- 基本位類型:
pub struct O; // 表示二進制0
pub struct I; // 表示二進制1
pub struct Null; // 表示空/無更高位4. 類型組合示例:+ B<I, O> 表示二進制補碼 "10" (十進制-2)+ B<B<O, I>, O> 表示二進制 "010" (十進制2)+ B<I, B<I, Null>> 可以表示二進制 "1.1" (小數)+ B<I, Null> 可以表示二進制 "1.0" (小數)5. 實現細節:+ 所有類型都實現了常見的 trait (Eq, Debug 等)以便于使用+ 提供了 new() 構造函數+ 實現了 Default trait+ 使用 Sealed trait 進行封裝保護6. 規范化規則:+ 嵌套的 B 結構體高位不能為 Null+ Null 只用于頂層結構表示邊界7. 使用場景:+ 類型級編程+ 編譯期計算+ 類型安全的二進制操作這種設計的主要優點是:+ 完全在類型系統層面實現,無運行時開銷+ 類型安全 - 非法狀態無法表示+ 可擴展 - 可以表示任意長度的二進制數+ 支持小數表示典型用例可能包括:+ 硬件寄存器映射+ 精確數值計算+ 協議解析+ 類型安全的位操作這個實現展示了 Rust 強大的類型系統和泛型能力,能夠在編譯期保證二進制數的正確性。