2个稳定版本
1.0.1 | 2022年11月7日 |
---|---|
1.0.0 | 2022年11月6日 |
178 在 无标准库 中
977 每月下载量
用于 2 crates
14KB
294 行
r-ex
无冗余的Rust核心库扩展,可提高在日常任务中使用Rust类型系统的体验。
亮点
-
无冗余。 每个扩展都位于其自己的功能标志之后,且没有默认启用的功能。
-
无风险。 任何可能panic或使用unsafe代码的功能都将
-unsafe
添加到其功能名称中。 -
无功能依赖。 每个扩展都是独立的,并且与其他所有扩展兼容,因此可以自由混合匹配。
-
无外部依赖。
-
无标准库。 此项目仅专注于 核心 库。您想看到一个类似的标准库项目吗? 请告诉我。
-
仅限稳定Rust。
-
100% 代码覆盖率。
示例
在数组之间复制
使用r-ex(代码永远不会panic)
let mut buf = [0u8; 4];
buf
.carved_mut()? // automatically select range
.copy_from(&[1, 2]); // type-safe & size-safe copy never panics
// buf = [1, 2, 0, 0]
不使用r-ex(可能panic)
let mut buf = [0u8; 4];
buf
.get_mut(0..2)? // explicitly specify range
.copy_from_slice(&[1, 2]); // copy_from_slice panics if sizes mismatch
// buf = [1, 2, 0, 0]
将大端值写入缓冲区偏移量处
使用 r-ex
fn write_big_endian(dest: &mut [u8], offset: usize, val: u32) {
dest.carve_mut(offset)? // automatically select range
.set_be(val); // supports big-endian and little-endian values; never panics
}
不使用 r-ex
fn write_big_endian(dest: &mut [u8], offset: usize, val: u32) {
dest.get_mut(offset..offset + core::mem::size_of_val(&val))? // explicitly specify range
.copy_from_slice(&val.to_be_bytes()) // copy_from_slice can panic
}
动机
Rust核心库很棒。它清晰、简洁、无冗余。这是我们喜欢的,我们大家都想保持这种状态。然而,我们经常发现自己编写 utils
或 misc
模块,其中包含少量针对核心库的小型通用扩展。有时这些几十行代码是整个项目中最聪明、最强大或最有用的代码。想到这些灵感和创意时刻被埋藏在某个内部模块中,无法公之于众,真是令人沮丧。
这就是r-ex项目发挥作用的地方。它是这些小巧但宝贵的核心库扩展的家园,否则它们将无法引起注意。
贡献指南
欢迎拉取请求。请确保您的贡献符合上面的 原则 部分。