unchecked-std

Crates.iounchecked-std
lib.rsunchecked-std
version1.0.1
sourcesrc
created_at2024-05-18 09:57:51.774752
updated_at2024-10-06 12:29:29.219131
descriptionsome methods from the Rust standard library without some checks
homepage
repositoryhttps://github.com/lincot/unchecked-std
max_upload_size
id1244192
size24,966
(lincot)

documentation

README

unchecked-std

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.

Example

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)

Feature flags

heapless adds unchecked methods for heapless data structures.

Commit count: 21

cargo fmt