当前位置: 首页 > 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.lryc.cn/news/587310.html

相关文章:

  • SQL预编译:安全高效数据库操作的关键
  • 苍穹外卖Day3
  • markdown-it-mathjax3-pro —— 新一代 Markdown 数学公式渲染插件
  • vue的优缺点
  • 框架和库的区别
  • day16~17-系统负载高故障与磁盘管理
  • muduo概述
  • 电商系统未来三年趋势:体验升级、技术赋能与模式重构
  • ASP.NET Core 中的延迟注入:原理与实践
  • 【UE教程/进阶】UE中的指针与引用
  • 应用层协议和JSON的使用
  • gcc 源码阅读---程序入口
  • 面试150 从前序与中序遍历构造二叉树
  • python赤道上空的大气环流剖面图(纬向-高度剖面)
  • Node.js 聊天内容加密解密实战教程(含缓存密钥优化)
  • 【elementUI踩坑记录】解决 el-table 固定列 el-table__fixed 导致部分滚动条无法拖动的问题
  • QT控件命名简写
  • Burp suite的下载安装基础用法(密码喷洒,密码爆破)
  • Linux 系统——管理 MySQL
  • 超市管理系统
  • 问题记录:Fastjson序列化-空值字段处理
  • 数据结构 Map和Set
  • 零基础完全理解视觉语言模型(VLM):从理论到代码实践
  • ArkUI Inspector工具用法全解析
  • Redis 命令总结
  • react中为啥使用剪头函数
  • Redis技术笔记-从三大缓存问题到高可用集群落地实战
  • 【SpringBoot】注册条件+自动配置原理+自定义starter
  • 通信网络编程5.0——JAVA
  • 【STM32实践篇】:F407 时钟系统