13 个版本 (7 个重大更新)
0.8.5 | 2023 年 11 月 7 日 |
---|---|
0.8.3 | 2023 年 8 月 30 日 |
0.8.2 | 2023 年 7 月 3 日 |
#459 在 Rust 模式
每月 363 次下载
在 2 个软件包中使用 (通过 skl)
21KB
175 行
uX2:更好的 uX
非标准整数类型,如 u7
、u9
、u10
、u63
、i7
、i9
等。
当应用程序需要非标准宽度的整数时,通常的做法是使用更大的容器,并在操作后确保值在范围内。uX2 通过提供 u1
-u127
和 i1
-i127
类型(根据启用的功能而定)来实现这一点,这些类型提供了安全的算术操作。
<core::primitive::i32 as core::ops::Add<core::primitive::i32>>::add
在 Debug
中可能会引发 panic,或在 Release
中发生溢出,而 <ux2::i32 as core::ops::Add<ux2::i32>>::add
在 Debug
或 Release
中既不会引发 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 类型占用的空间与能够容纳它们的最小整数类型一样大。
功能
8
、16
、32
、64
和 128
功能分别支持 i8
/u8
、i16
/u16
、i32
/u32
、i64
/u64
和 i128
/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 的一些开放问题,例如。
- https://github.com/rust-ux/uX/issues/55
- https://github.com/rust-ux/uX/issues/54
- https://github.com/rust-ux/uX/issues/53
- https://github.com/rust-ux/uX/issues/17
我为什么不只是在 uX 上提交一个 PR 呢?
- 审查:当前的 PR 似乎没有得到审查,我并不真的有信心一个完全改变整个库的 PR 会被合并。
- 控制:如果 uX 的维护者不活跃,我就无能为力了,我无法合并 PR 或修复问题,如果我有控制权,我就可以这样做。
依赖项
~235KB