Crystal VS Wasm benchmarks

Current benchmark data was generated on Mon Jun 23 2025, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][4 cores] AMD EPYC 7763 64-Core Processor (Model 1)

* -m in a file name stands for multi-threading or multi-processing

* -i in a file name stands for direct intrinsics usage. (Usage of simd intrinsics via libraries is not counted)

* -ffi in a file name stands for non-stdlib FFI usage

* (You may find time < time(user) + time(sys) for some non-parallelized programs, the overhead is from GC or JIT compiler, which are allowed to take advantage of multi-cores as that's more close to real-world scenarios.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1282ms 30ms 64.2MB 1257ms 10ms crystal 1.16.3
wasm 5.rs 1914ms 16ms 35.7MB 1893ms 10ms wasmtime 34.0.0
wasm 4.rs 1932ms 53ms 33.7MB 1910ms 10ms wasmtime 34.0.0
wasm 3.rs 1979ms 111ms 50.0MB 1950ms 20ms wasmtime 34.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 109ms 0.7ms 11.0MB 97ms 0ms crystal 1.16.3
wasm 5.rs 172ms 1.4ms 19.8MB 157ms 0ms wasmtime 34.0.0
wasm 4.rs 174ms 2.0ms 19.8MB 163ms 0ms wasmtime 34.0.0
wasm 3.rs 181ms 4.1ms 21.7MB 163ms 0ms wasmtime 34.0.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 1130ms 4.9ms 20.1MB 1113ms 7ms wasmtime 34.0.0
crystal 1.cr 1505ms 22ms 19.9MB 1440ms 53ms crystal 1.16.3

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 80ms 1.0ms 18.6MB 70ms 0ms wasmtime 34.0.0
crystal 1.cr 85ms 1.6ms 7.1MB 63ms 10ms crystal 1.16.3

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 58ms 1.4ms 6.4MB 43ms 0ms crystal 1.16.3
wasm 1.rs 418ms 0.4ms 19.3MB 403ms 0ms wasmtime 34.0.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 23ms 1.5ms 5.3MB 10ms 0ms crystal 1.16.3
wasm 1.rs 116ms 0.9ms 18.8MB 103ms 0ms wasmtime 34.0.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2481ms 9.0ms 2.9MB 2470ms 0ms crystal 1.16.3
wasm 1.rs 4068ms 6.6ms 17.6MB 4053ms 0ms wasmtime 34.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 213ms 7.6ms 2.9MB 200ms 0ms crystal 1.16.3
wasm 1.rs 348ms 3.7ms 17.6MB 337ms 0ms wasmtime 34.0.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 234ms 1.9ms 19.6MB 220ms 0ms wasmtime 34.0.0
crystal 2.cr 535ms 2.1ms 3.5MB 447ms 80ms crystal 1.16.3
crystal 1.cr 681ms 1.3ms 14.6MB 573ms 93ms crystal 1.16.3

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 32ms 0.8ms 17.7MB 20ms 0ms wasmtime 34.0.0
crystal 2.cr 57ms 0.7ms 3.6MB 40ms 0ms crystal 1.16.3
crystal 1.cr 73ms 0.9ms 4.9MB 57ms 3ms crystal 1.16.3

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1.9ms 0.2ms 2.9MB 0ms 0ms crystal 1.16.3
wasm 1.rs 7.1ms 0.1ms 16.7MB 0ms 0ms wasmtime 34.0.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2297ms 153ms 300.0MB 313ms 450ms crystal 1.16.3

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1282ms 15ms 53.0MB 33ms 70ms crystal 1.16.3

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 36ms 0.9ms 3.0MB 30ms 0ms crystal 1.16.3
crystal 1.cr 65ms 1.9ms 3.0MB 60ms 0ms crystal 1.16.3
wasm 1.rs 93ms 2.2ms 18.2MB 80ms 0ms wasmtime 34.0.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 101ms 2.3ms 3.0MB 93ms 0ms crystal 1.16.3
crystal 1.cr 186ms 0.8ms 3.0MB 180ms 0ms crystal 1.16.3
wasm 1.rs 255ms 1.5ms 17.7MB 240ms 0ms wasmtime 34.0.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 19ms 1.1ms 3.0MB 10ms 0ms crystal 1.16.3
crystal 1.cr 30ms 0.6ms 3.0MB 20ms 0ms crystal 1.16.3
wasm 1.rs 48ms 0.7ms 17.9MB 40ms 0ms wasmtime 34.0.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 316ms 2.7ms 9.3MB 303ms 0ms crystal 1.16.3
wasm 8.rs 832ms 1.4ms 21.1MB 820ms 0ms wasmtime 34.0.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 17ms 0.6ms 6.1MB 10ms 0ms crystal 1.16.3
wasm 8.rs 44ms 1.0ms 18.2MB 30ms 0ms wasmtime 34.0.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 880ms 16ms 64.2MB 857ms 10ms crystal 1.16.3
wasm 1.rs 903ms 21ms 41.8MB 877ms 10ms wasmtime 34.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 173ms 3.0ms 22.2MB 157ms 0ms crystal 1.16.3
wasm 1.rs 196ms 4.9ms 23.8MB 180ms 0ms wasmtime 34.0.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 342ms 1.3ms 3.3MB 330ms 0ms crystal 1.16.3
crystal 1.cr 344ms 2.9ms 3.3MB 333ms 0ms crystal 1.16.3
wasm 1.rs 404ms 1.2ms 17.7MB 390ms 0ms wasmtime 34.0.0
wasm 2.rs 562ms 1.1ms 17.8MB 550ms 0ms wasmtime 34.0.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 38ms 0.4ms 3.3MB 30ms 0ms crystal 1.16.3
crystal 1.cr 38ms 1.4ms 3.3MB 30ms 0ms crystal 1.16.3
wasm 1.rs 49ms 0.5ms 17.9MB 37ms 0ms wasmtime 34.0.0
wasm 2.rs 66ms 1.6ms 18.0MB 50ms 0ms wasmtime 34.0.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 350ms 2.1ms 8.3MB 340ms 0ms crystal 1.16.3
wasm 2.rs 381ms 1.9ms 22.9MB 367ms 0ms wasmtime 34.0.0
crystal 1.cr 432ms 2.5ms 42.9MB 420ms 0ms crystal 1.16.3
wasm 1.rs 613ms 42ms 56.9MB 597ms 10ms wasmtime 34.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 89ms 2.4ms 4.5MB 80ms 0ms crystal 1.16.3
crystal 1.cr 92ms 3.7ms 13.2MB 83ms 0ms crystal 1.16.3
wasm 1.rs 95ms 0.7ms 27.6MB 80ms 0ms wasmtime 34.0.0
wasm 2.rs 98ms 1.0ms 20.9MB 87ms 0ms wasmtime 34.0.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1928ms 26ms 6.3MB 1897ms 17ms crystal 1.16.3
wasm 2.rs 2220ms 15ms 18.7MB 2203ms 0ms wasmtime 34.0.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 447ms 9.3ms 4.9MB 433ms 0ms crystal 1.16.3
wasm 2.rs 523ms 2.7ms 18.4MB 510ms 0ms wasmtime 34.0.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 3609ms 13ms 17.7MB 3590ms 0ms wasmtime 34.0.0
crystal 1.cr 3760ms 10ms 4.5MB 3747ms 0ms crystal 1.16.3
wasm 7.rs 4900ms 13ms 17.7MB 4887ms 0ms wasmtime 34.0.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 908ms 2.9ms 19.5MB 893ms 0ms wasmtime 34.0.0
crystal 1.cr 949ms 7.6ms 4.4MB 940ms 0ms crystal 1.16.3
wasm 7.rs 1231ms 2.5ms 18.1MB 1220ms 0ms wasmtime 34.0.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 234ms 0.4ms 17.8MB 220ms 0ms wasmtime 34.0.0
crystal 1.cr 241ms 5.4ms 3.8MB 233ms 0ms crystal 1.16.3
wasm 7.rs 316ms 2.7ms 17.4MB 300ms 0ms wasmtime 34.0.0