Available on crate feature
tier2 only.Expand description
§Tier 2 — Process-unique seeds
Fast pseudo-random values derived from process ID, high-resolution time, and a monotonic atomic counter, then run through several rounds of a strong scalar mixer. Good for:
- Tempdir / temp-file names
- Request and trace IDs
- Log correlation IDs
- Any application-level “good-enough” uniqueness
Not cryptographic. An attacker who can observe outputs can
often reconstruct internal state and predict subsequent values. Use
tier3 for security-sensitive randomness.
§Uniqueness guarantees
- Within a single process: every
unique_u64call returns a distinct value (guaranteed by a never-resetting atomic counter, modulo wrap at2^64calls — about 584 years at 1 GHz). - Across processes on the same host: PID + nanosecond timestamp make collisions vanishingly unlikely.
- Across hosts: this tier makes no claims. Use
tier3when you need values unique across machines.
§Thread safety
All functions in this module are thread-safe and lock-free. The shared atomic counter ensures uniqueness even under concurrent access from any number of threads.
§Performance
Target <100ns per call. Cost is dominated by a SystemTime::now()
reading; the mixing itself is a handful of multiplies and rotates.
Functions§
- random_
alpha - Generate a random ASCII alphabetic string (
A-Z,a-z) of exactlylencharacters. - random_
alphanumeric - Generate a random ASCII alphanumeric string (
A-Z,a-z,0-9) of exactlylencharacters. - random_
hex_ string - Generate a random lowercase hex string (
0-9,a-f) of exactlylencharacters. - random_
numeric - Generate a random ASCII numeric string (
0-9) of exactlylencharacters. Leading zeros may appear. - random_
string - Generate a random string of exactly
lencharacters drawn fromcharset(uniformly). - range_
i8 - Generate a uniformly-distributed
i8in the half-open range[range.start, range.end). - range_
i16 - Generate a uniformly-distributed
i16in the half-open range[range.start, range.end). - range_
i32 - Generate a uniformly-distributed
i32in the half-open range[range.start, range.end). - range_
i64 - Generate a uniformly-distributed
i64in the half-open range[range.start, range.end). - range_
i128 - Generate a uniformly-distributed
i128in the half-open range[range.start, range.end). - range_
inclusive_ i8 - Generate a uniformly-distributed
i8in the closed range[range.start(), range.end()]. The full-widthi8::MIN..=i8::MAXis supported. - range_
inclusive_ i16 - Generate a uniformly-distributed
i16in the closed range[range.start(), range.end()]. The full-widthi16::MIN..=i16::MAXis supported. - range_
inclusive_ i32 - Generate a uniformly-distributed
i32in the closed range[range.start(), range.end()]. - range_
inclusive_ i64 - Generate a uniformly-distributed
i64in the closed range[range.start(), range.end()]. - range_
inclusive_ i128 - Generate a uniformly-distributed
i128in the closed range[range.start(), range.end()]. The full-widthi128::MIN..=i128::MAXis supported. - range_
inclusive_ isize - Generate a uniformly-distributed
isizein the closed range[range.start(), range.end()]. The full-widthisize::MIN..=isize::MAXis supported. - range_
inclusive_ u8 - Generate a uniformly-distributed
u8in the closed range[range.start(), range.end()]. The full-width0..=u8::MAXis supported. - range_
inclusive_ u16 - Generate a uniformly-distributed
u16in the closed range[range.start(), range.end()]. The full-width0..=u16::MAXis supported. - range_
inclusive_ u32 - Generate a uniformly-distributed
u32in the closed range[range.start(), range.end()]. - range_
inclusive_ u64 - Generate a uniformly-distributed
u64in the closed range[range.start(), range.end()]. - range_
inclusive_ u128 - Generate a uniformly-distributed
u128in the closed range[range.start(), range.end()]. The full-width0..=u128::MAXis supported. - range_
inclusive_ usize - Generate a uniformly-distributed
usizein the closed range[range.start(), range.end()]. The full-width0..=usize::MAXis supported. - range_
isize - Generate a uniformly-distributed
isizein the half-open range[range.start, range.end). - range_
u8 - Generate a uniformly-distributed
u8in the half-open range[range.start, range.end). - range_
u16 - Generate a uniformly-distributed
u16in the half-open range[range.start, range.end). - range_
u32 - Generate a uniformly-distributed
u32in the half-open range[range.start, range.end). - range_
u64 - Generate a uniformly-distributed
u64in the half-open range[range.start, range.end). - range_
u128 - Generate a uniformly-distributed
u128in the half-open range[range.start, range.end). - range_
usize - Generate a uniformly-distributed
usizein the half-open range[range.start, range.end). - unique_
base32 - Produce a process-unique base32 (Crockford alphabet) string of
exactly
lencharacters. Equivalent tounique_name; provided for symmetry withunique_hex. - unique_
hex - Produce a process-unique lowercase hex string of exactly
lencharacters. - unique_
name - Produce a process-unique base32 (Crockford alphabet) name of
exactly
lencharacters. - unique_
u64 - Produce a process-unique
u64.