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

【PhysUnits】15 完善的类型整数基本结构体(basic.rs)

一、源码

这段代码定义了一个类型系统,用于表示不同类型的数字(正数、负数、零、非零数等),并通过 trait 来标记这些类型的性质。

use crate::sealed::Sealed;
use core::marker::PhantomData;// ========== 基础类型定义 ==========
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub struct B0<H>(pub PhantomData<H>);#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub struct B1<H>(pub PhantomData<H>);#[derive(Eq, PartialEq, Clone, Copy, Debug, Default)]
pub struct Z0;#[derive(Eq, PartialEq, Clone, Copy, Debug, Default)]
pub struct P1;//新增#[derive(Eq, PartialEq, Clone, Copy, Debug, Default)]
pub struct N1;impl<H> Default for B0<H>{fn default() -> Self{B0(PhantomData)}
}impl<H> Default for B1<H>{fn default() -> Self{B1(PhantomData)}
}// ========== Sealed 实现 ==========
impl<H> Sealed for B0<H> {}
impl<H> Sealed for B1<H> {}
impl Sealed for Z0 {}
impl Sealed for P1 {}
impl Sealed for N1 {}// ========== 标记特质定义 ==========
pub trait Positive: Sealed {}
pub trait Negative: Sealed {}
pub trait Integer: Sealed + Copy + Default + 'static {}
pub trait NonZero: Integer {}
pub trait NonOne: Integer {}
pub trait NonNegOne: Integer {}
pub trait Unsigned: Integer {}// ========== Positive 实现 ==========
impl Positive for P1 {} //原先B1<Z0>替换为P1
impl<H: Positive> Positive for B0<H> {}
impl<H: Positive> Positive for B1<H> {}// ========== Negative 实现 ==========
impl Negative for N1 {}
impl<H: Negative> Negative for B0<H> {}
impl<H: Negative> Negative for B1<H> {}// ========== NonZero 实现 ==========
impl NonZero for P1 {}
impl NonZero for N1 {}
impl<H: NonZero> NonZero for B0<H> {}
impl<H: NonZero> NonZero for B1<H> {}// ========== Integer 实现 ==========
impl Integer for P1 {}
impl Integer for N1 {}
impl<H: NonZero> Integer for B0<H> {}
impl<H: NonZero> Integer for B1<H> {}
impl Integer for Z0 {} //现在Z0仅单独使用// ========== NonOne 实现 ==========
impl NonOne for Z0 {}
impl NonOne for N1 {}
impl<H: NonZero> NonOne for B0<H> {}
impl<H: NonZero> NonOne for B1<H> {}// ========== NonNegOne 实现 ==========
impl NonNegOne for Z0 {}
impl NonNegOne for P1 {}
impl<H: NonZero> NonNegOne for B0<H> {}
impl<H: NonZero> NonNegOne for B1<H> {}// ========== Unsigned 实现 ==========
impl Unsigned for P1 {}
impl<H: NonZero + Positive> Unsigned for B0<H> {}
impl<H: NonZero + Positive> Unsigned for B1<H> {}
impl Unsigned for Z0 {}// ========== 构造函数 ==========
impl<H> B0<H> {#[inline]pub fn new() -> Self {B0(PhantomData)}
}impl<H> B1<H> {#[inline]pub fn new() -> Self {B1(PhantomData)}
}impl P1 {#[inline]pub fn new() -> Self {P1}
}impl N1 {#[inline]pub fn new() -> Self {N1}
}impl Z0 {#[inline]pub fn new() -> Self {Z0}
}

二、基础类型定义

定义了五种基本类型:

  • B0 和 B1:泛型结构体,用于构建更复杂的数字类型。

  • Z0:表示数字0

  • P1:表示数字+1(新增的)

  • N1:表示数字-1
    这些类型都派生了一些常见 trait(Eq, PartialEq, Clone, Copy, Debug)并实现了 Default trait。

三、Sealed实现

为所有基础类型实现了 Sealed trait。Sealed 是一个标记 trait,用于限制这些 trait 只能在本模块中被实现(防止外部类型实现这些 trait)。

四、标记特质定义

定义了一系列 trait 来标记数字的性质:

  • Positive:正数

  • Negative:负数

  • Integer:整数(所有数字类型的基 trait)

  • NonZero:非零

  • NonOne:非一

  • NonNegOne:非负一

  • Unsigned:无符号数(零或正数)

五、各种特质的实现

为不同类型实现了上述特质:

  • Positive:P1 和所有以 P1 为基础构建的正数

  • Negative:N1 和所有以 N1 为基础构建的负数

  • NonZero:所有不等于零的数

  • Integer:所有整数类型

  • NonNegOne:除了N1,其他都是非负一数

  • Unsigned:P1和它们的组合是无符号数,Z0也是

六、构造函数

为所有类型提供了 new() 构造函数,方便创建实例。

七、设计目的

这个系统用来在类型级别表示和操作数字的,用于:

  • 可以确保某个函数只接受正数类型

  • 可以在编译期区分零和非零

  • 可以构建更复杂的数字类型(如 B1<B0> 表示二进制形式的正数5)

八、特点

  1. 零(Z0)现在是独立类型,不再像之前可能作为B0、B1的符号位

  2. 新增了P1直接表示+1,简化了正数的表示,即与B0、B1配合使用时表示符号为正,该位为1,更高位都是0。

  3. 使用类型参数H可以构建更复杂的数字(如B1<B0>表示5的二进制形式数字)

  4. 使用泛型和类型组合来表示更复杂的数字

  5. 通过 trait 约束来确保类型安全

  6. 零 (Z0) 是一个独立的类型,不再与B0、B1组合使用

  7. N1和新增的P1作为基本构建块,替代了之前可能使用的 B1

这种设计常见于需要编译期验证的领域,如维度检查、单位系统等。

http://www.xdnf.cn/news/9661.html

相关文章:

  • AI自动化测试框架browser use 项目测试总结
  • 2025.5.28学习日记 linux三剑客 awk
  • 阿达三国志战棋天下攻略详解最新
  • 从时间到宇宙:探索时间同步的底层奥秘与工程实践
  • AI的“空间盲症“
  • 幸运之轮系统测试报告
  • 影刀RPA-操作网站基础信息
  • java精简复习
  • 153. 寻找旋转排序数组中的最小值
  • BeeWorks:构建企业智能数字化协作中枢,实现办公与业务系统的无缝整合
  • ansible-playbook 剧本
  • Python编程7——面向对象编程2
  • 华为OD机试真题——模拟工作队列(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • 智能体通信协议之A2A和ANP对比分析
  • 【测试报告】博客系统
  • 学习python day10
  • 5.2.2二叉树的存储结构
  • 电脑软件管家 免安装便携 四十多种功能系统优化”“磁盘清理”“隐私保护
  • Windows中“无法成功完成操作,因为文件包含病毒或潜在的垃圾软件
  • 辛格迪客户案例 | 合规升级之路:辛格迪助力倍特药业迈向卓越
  • 面对 UI 差异化的调试难题:本地多设备测试中的 WebDebugX 应用实录
  • 【蓝桥杯嵌入式】【复盘】第15届省赛真题
  • Python学习(3) ----- Python的函数定义及其使用
  • OpenLayers 加载网格信息
  • [CISCN 2021初赛]glass
  • 【第2章 绘制】2.15 剪辑区
  • 【摄影教程】
  • 使用jessibuca+wvp+zlm实现html无插件播放摄像头实时画面
  • promise详细总结
  • VTK|Z轴拉伸功能的实现