当前位置: 首页 > news >正文

【unitrix】 5.0 第二套类型级二进制数基本结构体(types2.rs)

一、源码

这是一个使用 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 {}

二、源码分析

  1. 核心设计理念:
  • 使用泛型结构体 B<H, L> 表示二进制数,其中 H 是高位,L 是低位

  • 通过类型组合来表示任意长度的二进制数

  • 支持整数和小数的表示

  1. 主要类型定义:

pub struct B<H, L>(pub H, pub L);
  • 二元组结构体,H 表示高位,L 表示低位

  • 可以嵌套使用来表示多位二进制数

  1. 基本位类型:

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 强大的类型系统和泛型能力,能够在编译期保证二进制数的正确性。
http://www.dtcms.com/a/278066.html

相关文章:

  • 16.使用ResNet网络进行Fashion-Mnist分类
  • css如何同时给元素设置背景和背景图?
  • 每日算法刷题Day47:7.13:leetcode 复习完滑动窗口一章,用时2h30min
  • 说实话,统计分析用Python这5个第三方库就够了
  • AutoLabor-ROS-Python 学习记录——第一章 ROS概述与环境搭建
  • PortsSwiggerLab: SSRF with blacklist-based input filter
  • JS进阶-day1 作用域解构箭头函数
  • Spring AI 项目实战(十六):Spring Boot + AI + 通义万相图像生成工具全栈项目实战(附完整源码)
  • NO.5数据结构串和KMP算法|字符串匹配|主串与模式串|KMP|失配分析|next表
  • pthread_mutex_unlock函数的概念和用法
  • 大规模电商系统分库分表实战经验分享
  • NFSV4锁机制(三)
  • 编程技术杂谈2.0
  • DVWA靶场通关笔记-XSS DOM(High级别)
  • 垃圾收集器-Serial Old
  • CVE-2022-0609
  • vue2入门(1)vue核心语法详解复习笔记
  • 【开源项目】网络诊断告别命令行!NetSonar:开源多协议网络诊断利器
  • 1.1.1+1.1.3 操作系统的概念、功能
  • c++无锁队列moodycamel::ConcurrentQueue测试结果
  • 在高并发场景下,仅依赖数据库机制(如行锁、版本控制)无法完全避免数据异常的问题
  • Sping AI Alibaba
  • 第11章 AB实验评估指标体系
  • Soul方程式:Z世代背景下兴趣社交平台的商业模式解析
  • Java行业前景如何?零基础又该如何去学Java?
  • 深入理解 RocketMQ:生产者详解
  • 并行并发丨C++ 协程、现场池 学习笔记
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十三课——图像浮雕效果的FPGA实现
  • 语言模型常用的激活函数(Sigmoid ,GeLU ,SwiGLU,GLU,SiLU,Swish)
  • 算法-汽水瓶兑换