6 个版本 (稳定)

3.0.0-rc22023年1月29日
3.0.0-rc12022年11月16日
2.0.0 2021年11月28日
1.2.0 2021年2月13日
1.0.0 2020年2月24日

#212Rust 模式

Download history 603245/week @ 2024-03-14 600825/week @ 2024-03-21 579364/week @ 2024-03-28 614333/week @ 2024-04-04 619218/week @ 2024-04-11 602371/week @ 2024-04-18 551092/week @ 2024-04-25 550875/week @ 2024-05-02 557213/week @ 2024-05-09 568868/week @ 2024-05-16 554754/week @ 2024-05-23 640520/week @ 2024-05-30 628424/week @ 2024-06-06 635355/week @ 2024-06-13 664581/week @ 2024-06-20 547597/week @ 2024-06-27

2,601,280 每月下载量
3,609 个crate中使用 (38 直接使用)

MIT 许可证

81KB
2K SLoC

funty

FunTy pe 一致化

Latest Version MSRV License

Documentation Crate Downloads

1.0 之前,Rust 有用于数值原始类型的特质,允许代码泛化它接受的具体类型。这从未稳定下来,最终被移除。

该库提供一组特质,这些特质抽象了原始类型的通用 API 表面,因此可以在特质系统中表示诸如数值行为、寄存器宽度或符号等属性。

指针统一

*const T*mut TPointer<T, Shared | Unique> 类型下统一。 Permission 特质允许代码泛化写权限,并正确地传播、降级和升级权限,而不会违反 Rust 的来源跟踪规则。

特别是, Pointer 使用关联类型系统根据它给定的 Permission 类型参数内部包装 *const T*mut T,因此用户代码永远无法(安全地)不当升级从只读来源历史派生出的指针的写权限。

有关更多信息,请参阅 ptr 模块。

功能特质

所有原始类型(boolchar{i,u}{8,16,32,64,128,size}f{32,64})实现了 Fundamental 特性。该特性定义了可用于原始类型的基概念:它们是纯旧数据值,并且可以被 as-casted 到彼此。除了提供基本特性和允许转换外,Fundamental 没有其他功能。

数值原始类型(除了 boolchar 以外的一切)实现了以下特性层次结构

  • Numeric 导出了在所有数值原始类型上找到的所有特性和方法。
    • Integral 导出了在所有整数上找到的特性和方法。
      • Signed 统一了所有有符号整数 iN
      • Unsigned 统一了所有无符号整数 uN
    • Floating 统一了所有浮点数。

宽度特性

有三个特性家族用于类型宽度。对于 8163264128Width

  • IsWidth 由恰好是这个宽度的数字实现。
  • AtLeastWidth 由所有这个宽度或更宽的数字实现。
  • AtMostWidth 由所有这个宽度或更窄的数字实现。

使用

类型 use funty::*;,然后声明您需要的特性作为泛型边界。

示例

对某些无符号整数执行位运算

use funty::Unsigned;
fn invert_middle_bits<T: Unsigned>(num: T) -> T {
  let mask = (!T::ZERO).wrapping_shl(2).wrapping_shr(4).wrapping_shl(2);
  num ^ mask
}

#![no_std] 兼容性

浮点数提供了许多在目标系统的 libm 中实现的功能。这个库仅在 std-targets 中存在。如果您正在编译到 #![no_std] 目标,请使用以下方式依赖此库

[dependencies.funty]
version = "3"
default-features = false

无运行时依赖