8 个重大版本发布
0.9.0 | 2023 年 8 月 30 日 |
---|---|
0.8.0 | 2023 年 7 月 2 日 |
0.7.0 | 2023 年 6 月 29 日 |
#2150 in 过程宏
459 每月下载量
在 3 个 Crates 中使用 (通过 ux2)
75KB
1.5K SLoC
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
中引发恐慌或在Release
中溢出,而<ux2::i32 as core::ops::Add<ux2::i32>>::add
在Debug
或Release
中既不会引发恐慌也不会溢出,这是因为它返回了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或修复问题,如果我有控制权,我可以这样做。
依赖
~80KB