Crates.io | unchecked-std |
lib.rs | unchecked-std |
version | 1.0.1 |
source | src |
created_at | 2024-05-18 09:57:51.774752 |
updated_at | 2024-10-06 12:29:29.219131 |
description | some methods from the Rust standard library without some checks |
homepage | |
repository | https://github.com/lincot/unchecked-std |
max_upload_size | |
id | 1244192 |
size | 24,966 |
Rust standard library methods with some checks removed for the sake of performance and binary size.
For safety, assertions are present in debug mode.
Most implementations do not rely on corresponding std methods, except for
extend_from_slice_unchecked
which works based on unreachable_unchecked
and has a codegen test
to confirm that the capacity check gets elided.
The crate is no_std
, but requires alloc
.
format!
way:
fn hello_format(name: &str) -> String {
format!("Hello, {name}!")
}
macro-free std
way:
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
way:
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
}
The benchmark result is:
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
adds unchecked methods for
heapless data structures.