2个版本 (1个稳定版)
新 1.0.0 | 2024年8月12日 |
---|---|
0.1.0 | 2024年5月18日 |
231 在 内存管理 中排名
每月下载 105 次
14KB
189 行
unchecked-std
为了性能和二进制大小,移除了一些检查的Rust标准库方法。
为了安全,调试模式下存在断言。
大多数实现不依赖于相应的std方法,除了 extend_from_slice_unchecked
,它是基于 unreachable_unchecked
的,并且有一个 代码生成测试 以确认容量检查被省略。
这个crate是 no_std
,但需要 alloc
。
示例
format!
方式
fn hello_format(name: &str) -> String {
format!("Hello, {name}!")
}
无宏的 std
方式
fn hello_checked(name: &str) -> String {
let mut s = String::with_capacity("Hello, !".len() + name.len());
s.push_str("Hello, ");
s.push_str(name);
s.push('!');
s
}
unchecked-std
方式
use unchecked_std::prelude::*;
fn hello_unchecked(name: &str) -> String {
let mut s = String::with_capacity("Hello, !".len() + name.len());
// SAFETY: `s` has been initialized with sufficient capacity
unsafe {
s.push_str_unchecked("Hello, ");
s.push_str_unchecked(name);
s.push_unchecked('!');
}
s
}
基准测试结果如下
test bench_hello_format ... bench: 29.50 ns/iter (+/- 0.74)
test bench_hello_checked ... bench: 15.47 ns/iter (+/- 0.31)
test bench_hello_unchecked ... bench: 11.45 ns/iter (+/- 0.65)
特性标志
heapless
为 heapless 数据结构添加了非检查方法。
依赖
~105KB