Benchmarks for random byte generation and lookup table operations across Rust and Python implementations.
Some of the most common operations in data processing are random generation and lookup tables. That's true not only for strings but for any data type, and StringZilla has been extensively used in Image Processing and Bioinformatics for those purposes.
| Library | Short Words | Long Lines |
|---|---|---|
| Rust | ||
getrandom::fill |
0.03 GB/s | 0.46 GB/s |
rand_chacha::ChaCha20Rng |
0.06 GB/s | 2.00 GB/s |
rand_xoshiro::Xoshiro128Plus |
0.40 GB/s | 4.03 GB/s |
zeroize::zeroize |
0.46 GB/s | 4.98 GB/s |
stringzilla::fill_random |
1.01 GB/s | 8.58 GB/s |
| Python | ||
numpy.PCG64 |
0.01 GB/s | 1.87 GB/s |
numpy.Philox |
0.01 GB/s | 1.45 GB/s |
pycryptodome.AES-CTR |
0.01 GB/s | 0.37 GB/s |
stringzilla.random |
0.11 GB/s | 18.46 GB/s |
Measured June 17, 2026.
Performing in-place lookups in a precomputed table of 256 bytes:
| Library | Short Words | Long Lines |
|---|---|---|
| Rust | ||
| serial code | 0.47 GB/s | 4.06 GB/s |
stringzilla::lookup_inplace |
0.42 GB/s | 10.22 GB/s |
| Python | ||
bytes.translate<new> |
0.12 GB/s | 2.68 GB/s |
numpy.take<new> |
0.01 GB/s | 0.86 GB/s |
opencv.LUT<new> |
0.01 GB/s | 2.00 GB/s |
opencv.LUT<inplace> |
0.01 GB/s | 2.16 GB/s |
stringzilla.translate<new> |
0.09 GB/s | 7.94 GB/s |
stringzilla.translate<inplace> |
0.07 GB/s | 8.02 GB/s |
Measured June 17, 2026.
See README.md for dataset information and replication instructions.