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 · Rust 包仓库 603245/week @ 2024-03-14 · Rust 包仓库 600825/week @ 2024-03-21 · Rust 包仓库 579364/week @ 2024-03-28 · Rust 包仓库 614333/week @ 2024-04-04 · Rust 包仓库 619218/week @ 2024-04-11 · Rust 包仓库 602371/week @ 2024-04-18 · Rust 包仓库 551092/week @ 2024-04-25 · Rust 包仓库 550875/week @ 2024-05-02 · Rust 包仓库 557213/week @ 2024-05-09 · Rust 包仓库 568868/week @ 2024-05-16 · Rust 包仓库 554754/week @ 2024-05-23 · Rust 包仓库 640520/week @ 2024-05-30 · Rust 包仓库 628424/week @ 2024-06-06 · Rust 包仓库 635355/week @ 2024-06-13 · Rust 包仓库 664581/week @ 2024-06-20 · Rust 包仓库 547597/week @ 2024-06-27 · Rust 包仓库

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

无运行时依赖