13 个版本 (7 个重大更新)

0.8.5 2023 年 11 月 7 日
0.8.3 2023 年 8 月 30 日
0.8.2 2023 年 7 月 3 日

#459Rust 模式

Download history 3/week @ 2024-03-13 2/week @ 2024-03-27 3/week @ 2024-04-03 49/week @ 2024-06-12 184/week @ 2024-06-19 130/week @ 2024-06-26

每月 363 次下载
2 个软件包中使用 (通过 skl)

Apache-2.0

21KB
175

uX2:更好的 uX

Crates.io docs codecov

非标准整数类型,如 u7u9u10u63i7i9 等。

当应用程序需要非标准宽度的整数时,通常的做法是使用更大的容器,并在操作后确保值在范围内。uX2 通过提供 u1-u127i1-i127 类型(根据启用的功能而定)来实现这一点,这些类型提供了安全的算术操作。

<core::primitive::i32 as core::ops::Add<core::primitive::i32>>::addDebug 中可能会引发 panic,或在 Release 中发生溢出,而 <ux2::i32 as core::ops::Add<ux2::i32>>::addDebugRelease 中既不会引发 panic 也不会发生溢出,这是因为它返回了 ux2::i33。这对于 ux2 中所有操作和类型的组合都适用。这允许进行更彻底的编译时类型检查。

use rand::Rng;
let a = ux2::i4::try_from(3i8).unwrap();
let b = ux2::i8::from(rand::thread_rng().gen::<core::primitive::i8>());
let c: ux2::i9 = a + b;
let d: ux2::i4 = c % a;
let e: core::primitive::i8 = core::primitive::i8::from(d);

uX2 类型占用的空间与能够容纳它们的最小整数类型一样大。

功能

8163264128 功能分别支持 i8/u8i16/u16i32/u32i64/u64i128/u128 的类型。

编译时间呈指数增长,分别为 3 秒、7 秒、30 秒、3 分钟和 46 分钟。

点击此处获取更多详情
```bash
jonathan@jonathan-System-Product-Name:~/Projects/ux2/ux2$ cargo clean
jonathan@jonathan-System-Product-Name:~/Projects/ux2/ux2$ cargo build --no-default-features --features 8
Compiling proc-macro2 v1.0.56
Compiling unicode-ident v1.0.8
Compiling quote v1.0.26
Compiling ux2-macros v0.7.0 (/home/jonathan/Projects/ux2/ux2-macros)
Compiling ux2 v0.7.0 (/home/jonathan/Projects/ux2/ux2)
    Finished dev [unoptimized + debuginfo] target(s) in 3.00s
jonathan@jonathan-System-Product-Name:~/Projects/ux2/ux2$ cargo clean
jonathan@jonathan-System-Product-Name:~/Projects/ux2/ux2$ cargo build --no-default-features --features 16
Compiling proc-macro2 v1.0.56
Compiling quote v1.0.26
Compiling unicode-ident v1.0.8
Compiling ux2-macros v0.7.0 (/home/jonathan/Projects/ux2/ux2-macros)
Compiling ux2 v0.7.0 (/home/jonathan/Projects/ux2/ux2)
    Finished dev [unoptimized + debuginfo] target(s) in 7.36s
jonathan@jonathan-System-Product-Name:~/Projects/ux2/ux2$ cargo clean
jonathan@jonathan-System-Product-Name:~/Projects/ux2/ux2$ cargo build --no-default-features --features 32
Compiling proc-macro2 v1.0.56
Compiling unicode-ident v1.0.8
Compiling quote v1.0.26
Compiling ux2-macros v0.7.0 (/home/jonathan/Projects/ux2/ux2-macros)
Compiling ux2 v0.7.0 (/home/jonathan/Projects/ux2/ux2)
    Finished dev [unoptimized + debuginfo] target(s) in 29.96s
jonathan@jonathan-System-Product-Name:~/Projects/ux2/ux2$ cargo clean
jonathan@jonathan-System-Product-Name:~/Projects/ux2/ux2$ cargo build --no-default-features --features 64
Compiling proc-macro2 v1.0.56
Compiling unicode-ident v1.0.8
Compiling quote v1.0.26
Compiling ux2-macros v0.7.0 (/home/jonathan/Projects/ux2/ux2-macros)
Compiling ux2 v0.7.0 (/home/jonathan/Projects/ux2/ux2)
    Finished dev [unoptimized + debuginfo] target(s) in 3m 26s
jonathan@jonathan-System-Product-Name:~/Projects/ux2/ux2$ cargo clean
jonathan@jonathan-System-Product-Name:~/Projects/ux2/ux2$ cargo build --no-default-features --features 128
Compiling proc-macro2 v1.0.56
Compiling unicode-ident v1.0.8
Compiling quote v1.0.26
Compiling ux2-macros v0.7.0 (/home/jonathan/Projects/ux2/ux2-macros)
Compiling ux2 v0.7.0 (/home/jonathan/Projects/ux2/ux2)
    Finished dev [unoptimized + debuginfo] target(s) in 46m 22s
```

为什么存在这样的功能?为什么使用这个而不是 ux

我发现 uX 似乎没有积极维护,当前的代码需要进行一些大的改动。

所以我做了任何合理开发者都会做的事情,完全重新发明了轮子。

来看看 uX2,几乎在各个方面都略胜一筹。

  • 更多功能,可选支持 serde
  • 更好的文档。
  • 更好的 CI(例如自动化的更改日志)

我已经在这个库中实现了 uX 的一些开放问题,例如。

我为什么不只是在 uX 上提交一个 PR 呢?

  1. 审查:当前的 PR 似乎没有得到审查,我并不真的有信心一个完全改变整个库的 PR 会被合并。
  2. 控制:如果 uX 的维护者不活跃,我就无能为力了,我无法合并 PR 或修复问题,如果我有控制权,我就可以这样做。

依赖项

~235KB