For a wrapper package, see XXhash.jl.
We referred to the reference spec from the official repository.
This package provides native Julia implementations for some of the XXHash algorithms. Currently, only one-shot hashing is supported. And see the following table for the supported algorithms:
- XXH32
- XXH64
- XXH3_64
- XXH3_128
julia> using XXHashNative: xxh3_64
# xxh3_64(input::AbstractVector{UInt8}, seed=UInt64(0), secret=XXHashNative._ksecret)
# xxh3_64(input::AbstractString, seed=UInt64(0), secret=XXHashNative._ksecret)
julia> xxh3_64(codeunits("Hello, world!"))
0xf3c34bf11915e869
julia> xxh3_64("Hello, world!")
0xf3c34bf11915e869
Note: not particularly fast but fast enough
julia> using XXHashNative: xxh3_64
julia> using BenchmarkTools
julia> @benchmark xxh3_64(x) setup=(x=rand(UInt8, 2^20))
BenchmarkTools.Trial: 10000 samples with 1 evaluation.
Range (min … max): 126.968 μs … 371.351 μs ┊ GC (min … max): 0.00% … 0.00%
Time (median): 132.413 μs ┊ GC (median): 0.00%
Time (mean ± σ): 138.741 μs ± 21.616 μs ┊ GC (mean ± σ): 0.00% ± 0.00%
▅█▇▆▆▅▅▄▃▃▃▂▁▁▁▁▁ ▁ ▂
█████████████████████▇▇▇▇▆▆▆▆▆▆▆▅▅▆▄▆▄▄▅▄▄▅▃▄▃▄▁▃▃▅▁▆▅▆▇███▇▇ █
127 μs Histogram: log(frequency) by time 247 μs <
Memory estimate: 80 bytes, allocs estimate: 1.
julia> 1/126*10^6
7936.50#MB/s
# for comparison, the wrapper XXhash.jl is 3 times faster
julia> 1/40.725*10^6
24554.94#MB/s