8 个重大版本发布

0.9.0 2023 年 8 月 30 日
0.8.0 2023 年 7 月 2 日
0.7.0 2023 年 6 月 29 日

#2150 in 过程宏

Download history 165/week @ 2024-04-14 1/week @ 2024-04-21 230/week @ 2024-06-16 55/week @ 2024-06-23 94/week @ 2024-06-30 123/week @ 2024-07-07 88/week @ 2024-07-14 142/week @ 2024-07-21

459 每月下载量
3 个 Crates 中使用 (通过 ux2)

Apache-2.0

75KB
1.5K SLoC

uX2:更好的 uX

Crates.io docs codecov

非标准整数类型如 u7u9u10u63i7i9 等。

当应用程序需要非标准宽度的整数时,通常的做法是使用更大的容器,并确保在操作后值在范围内。uX2 旨在通过提供 u1-u127i1-i127 类型(取决于启用的功能)来提供安全的算术操作,从而一次性解决这个问题。

<core::primitive::i32 as core::ops::Add<core::primitive::i32>>::add可能在Debug中引发恐慌或在Release中溢出,而<ux2::i32 as core::ops::Add<ux2::i32>>::addDebugRelease中既不会引发恐慌也不会溢出,这是因为它返回了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或修复问题,如果我有控制权,我可以这样做。

依赖

~80KB