Crystal VS Rust benchmarks

Current benchmark data was generated on Mon Apr 14 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 1247ms 8.3ms 64.0MB 1223ms 13ms crystal 1.16.0
rust 4.rs 1281ms 5.2ms 33.6MB 1260ms 7ms rustc 1.86.0
rust 5.rs 1344ms 1.4ms 33.8MB 1317ms 10ms rustc 1.86.0
rust 3.rs 1480ms 48ms 49.8MB 1450ms 13ms rustc 1.86.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 107ms 2.4ms 10.9MB 97ms 0ms crystal 1.16.0
rust 4.rs 123ms 2.7ms 5.6MB 117ms 0ms rustc 1.86.0
rust 5.rs 127ms 1.9ms 5.8MB 120ms 0ms rustc 1.86.0
rust 3.rs 143ms 9.2ms 7.8MB 130ms 0ms rustc 1.86.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 550ms 46ms 9.1MB 2070ms 70ms rustc 1.86.0
rust 5-m.rs 667ms 6.9ms 5.6MB 2517ms 67ms rustc 1.86.0
rust 1-m.rs 937ms 11ms 8.5MB 3437ms 210ms rustc 1.86.0
rust 3.rs 1112ms 2.4ms 9.3MB 1070ms 30ms rustc 1.86.0
crystal 1.cr 1555ms 17ms 19.8MB 1483ms 60ms crystal 1.16.0
rust 4.rs 1884ms 5.6ms 7.4MB 1867ms 0ms rustc 1.86.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 5-m.rs 53ms 2.0ms 3.4MB 157ms 13ms rustc 1.86.0
rust 3-m.rs 57ms 2.2ms 4.3MB 180ms 10ms rustc 1.86.0
rust 3.rs 71ms 2.9ms 4.0MB 60ms 0ms rustc 1.86.0
rust 1-m.rs 72ms 0.7ms 3.8MB 227ms 23ms rustc 1.86.0
crystal 1.cr 86ms 2.7ms 7.0MB 67ms 10ms crystal 1.16.0
rust 4.rs 115ms 0.3ms 3.3MB 107ms 0ms rustc 1.86.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 59ms 0.2ms 6.4MB 40ms 3ms crystal 1.16.0
rust 1.rs 119ms 2.2ms 3.6MB 110ms 0ms rustc 1.86.0
rust 2.rs 424ms 1.6ms 3.6MB 413ms 0ms rustc 1.86.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 23ms 1.2ms 5.1MB 10ms 0ms crystal 1.16.0
rust 1.rs 33ms 0.4ms 2.9MB 23ms 0ms rustc 1.86.0
rust 2.rs 76ms 0.5ms 3.0MB 70ms 0ms rustc 1.86.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 410ms 0.5ms 2.0MB 1573ms 0ms rustc 1.86.0
rust 5-m.rs 579ms 12ms 2.1MB 2190ms 0ms rustc 1.86.0
rust 2-im.rs 627ms 5.0ms 2.1MB 2440ms 0ms rustc 1.86.0
rust 1-m.rs 970ms 5.3ms 2.1MB 3770ms 0ms rustc 1.86.0
rust 3-i.rs 1508ms 2.6ms 1.9MB 1497ms 0ms rustc 1.86.0
rust 2-i.rs 1759ms 2.8ms 1.8MB 1750ms 0ms rustc 1.86.0
crystal 1.cr 2465ms 3.2ms 2.8MB 2457ms 0ms crystal 1.16.0
rust 1.rs 2692ms 4.5ms 1.8MB 2683ms 0ms rustc 1.86.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 38ms 0.5ms 2.1MB 120ms 0ms rustc 1.86.0
rust 5-m.rs 53ms 1.1ms 2.0MB 173ms 0ms rustc 1.86.0
rust 2-im.rs 60ms 1.3ms 2.0MB 200ms 0ms rustc 1.86.0
rust 1-m.rs 87ms 0.9ms 2.0MB 300ms 0ms rustc 1.86.0
rust 3-i.rs 127ms 0.8ms 1.9MB 120ms 0ms rustc 1.86.0
rust 2-i.rs 150ms 0.8ms 1.8MB 140ms 0ms rustc 1.86.0
crystal 1.cr 204ms 1.4ms 2.8MB 190ms 0ms crystal 1.16.0
rust 1.rs 229ms 0.2ms 1.9MB 220ms 0ms rustc 1.86.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 5c-m.rs 89ms 0.4ms 3.2MB 247ms 0ms rustc 1.86.0
rust 5-m.rs 93ms 1.6ms 3.2MB 277ms 0ms rustc 1.86.0
rust 6.rs 144ms 0.8ms 1.9MB 133ms 0ms rustc 1.86.0
rust 1c.rs 162ms 0.4ms 1.9MB 150ms 0ms rustc 1.86.0
rust 1.rs 194ms 0.5ms 2.0MB 183ms 0ms rustc 1.86.0
crystal 2.cr 553ms 1.2ms 3.5MB 453ms 87ms crystal 1.16.0
crystal 1.cr 691ms 0.8ms 14.4MB 573ms 107ms crystal 1.16.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 5c-m.rs 16ms 0.6ms 3.2MB 20ms 0ms rustc 1.86.0
rust 5-m.rs 16ms 0.3ms 3.2MB 20ms 0ms rustc 1.86.0
rust 6.rs 17ms 0.8ms 1.9MB 10ms 0ms rustc 1.86.0
rust 1c.rs 19ms 0.2ms 1.8MB 10ms 0ms rustc 1.86.0
rust 1.rs 22ms 0.3ms 1.9MB 13ms 0ms rustc 1.86.0
crystal 2.cr 61ms 0.9ms 3.5MB 40ms 10ms crystal 1.16.0
crystal 1.cr 74ms 1.6ms 4.8MB 50ms 10ms crystal 1.16.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 1.2ms 0.1ms 1.9MB 0ms 0ms rustc 1.86.0
rust 1.rs 1.2ms 0.1ms 1.8MB 0ms 0ms rustc 1.88.0-nightly
crystal 1.cr 1.9ms 0.1ms 2.8MB 0ms 0ms crystal 1.16.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1-m.rs 306ms 70ms 84.5MB 163ms 513ms rustc 1.86.0
rust 2-m.rs 412ms 81ms 69.0MB 237ms 887ms rustc 1.86.0
rust 2-http2.rs 422ms 21ms 60.3MB 873ms 543ms rustc 1.86.0
rust 1-http2.rs 623ms 77ms 63.6MB 1497ms 697ms rustc 1.86.0
crystal 1.cr 2319ms 124ms 255.6MB 313ms 490ms crystal 1.16.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1-m.rs 43ms 6.4ms 17.5MB 17ms 60ms rustc 1.86.0
rust 2-m.rs 78ms 6.8ms 21.8MB 30ms 157ms rustc 1.86.0
rust 2-http2.rs 220ms 47ms 27.6MB 560ms 183ms rustc 1.86.0
rust 1-http2.rs 253ms 35ms 27.8MB 683ms 197ms rustc 1.86.0
crystal 1.cr 1250ms 107ms 59.0MB 37ms 80ms crystal 1.16.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 34ms 5.9ms 1.8MB 23ms 0ms rustc 1.86.0
crystal 0-unsafe.cr 37ms 1.4ms 2.9MB 30ms 0ms crystal 1.16.0
rust 1.rs 57ms 5.3ms 1.9MB 47ms 0ms rustc 1.86.0
crystal 1.cr 64ms 0.9ms 2.9MB 53ms 0ms crystal 1.16.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 99ms 1.1ms 2.9MB 90ms 0ms crystal 1.16.0
rust 0-unsafe.rs 135ms 6.2ms 1.8MB 123ms 0ms rustc 1.86.0
crystal 1.cr 185ms 0.7ms 2.9MB 173ms 0ms crystal 1.16.0
rust 1.rs 199ms 28ms 1.9MB 190ms 0ms rustc 1.86.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 18ms 1.3ms 2.9MB 10ms 0ms crystal 1.16.0
rust 0-unsafe.rs 23ms 0.4ms 1.8MB 17ms 0ms rustc 1.86.0
rust 1.rs 30ms 2.2ms 1.8MB 23ms 0ms rustc 1.86.0
crystal 1.cr 30ms 1.7ms 2.9MB 20ms 0ms crystal 1.16.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 9.rs 275ms 0.4ms 4.8MB 267ms 0ms rustc 1.88.0-nightly
rust 8.rs 293ms 2.0ms 4.8MB 283ms 0ms rustc 1.86.0
crystal 1.cr 313ms 1.1ms 9.1MB 300ms 0ms crystal 1.16.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 9.rs 13ms 0.5ms 1.9MB 10ms 0ms rustc 1.88.0-nightly
rust 8.rs 14ms 0.2ms 1.9MB 10ms 0ms rustc 1.86.0
crystal 1.cr 17ms 0.4ms 6.3MB 10ms 0ms crystal 1.16.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 703ms 1.4ms 33.8MB 680ms 10ms rustc 1.86.0
crystal 1.cr 843ms 7.3ms 64.0MB 823ms 10ms crystal 1.16.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 150ms 2.2ms 9.8MB 140ms 0ms rustc 1.86.0
crystal 1.cr 174ms 5.4ms 22.1MB 157ms 0ms crystal 1.16.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 163ms 0.5ms 1.8MB 160ms 0ms rustc 1.86.0
rust 7-i.rs 237ms 0.9ms 1.8MB 230ms 0ms rustc 1.86.0
rust 1.rs 240ms 0.4ms 1.8MB 230ms 0ms rustc 1.86.0
rust 3.rs 279ms 0.7ms 1.9MB 270ms 0ms rustc 1.88.0-nightly
rust 2.rs 284ms 0.8ms 1.8MB 273ms 0ms rustc 1.86.0
crystal 1.cr 344ms 0.9ms 3.1MB 333ms 0ms crystal 1.16.0
crystal 2.cr 344ms 2.7ms 3.1MB 333ms 0ms crystal 1.16.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 18ms 0.1ms 1.8MB 10ms 0ms rustc 1.86.0
rust 7-i.rs 26ms 0.5ms 1.9MB 20ms 0ms rustc 1.86.0
rust 1.rs 26ms 0.2ms 1.8MB 20ms 0ms rustc 1.86.0
rust 3.rs 30ms 0.1ms 1.8MB 20ms 0ms rustc 1.88.0-nightly
rust 2.rs 31ms 0.2ms 1.8MB 20ms 0ms rustc 1.86.0
crystal 2.cr 37ms 0.6ms 3.1MB 30ms 0ms crystal 1.16.0
crystal 1.cr 39ms 0.7ms 3.3MB 30ms 0ms crystal 1.16.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 298ms 3.7ms 8.1MB 287ms 0ms crystal 1.16.0
rust 1.rs 308ms 4.4ms 40.9MB 293ms 0ms rustc 1.86.0
rust 2.rs 328ms 1.8ms 6.6MB 317ms 0ms rustc 1.86.0
crystal 1.cr 425ms 7.5ms 62.4MB 410ms 0ms crystal 1.16.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 59ms 2.9ms 11.6MB 47ms 0ms rustc 1.86.0
crystal 2.cr 74ms 1.4ms 4.4MB 67ms 0ms crystal 1.16.0
rust 2.rs 83ms 1.0ms 2.9MB 70ms 0ms rustc 1.86.0
crystal 1.cr 88ms 0.8ms 13.0MB 80ms 0ms crystal 1.16.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 1514ms 7.3ms 2.7MB 1303ms 197ms rustc 1.86.0
rust 2.rs 1711ms 4.7ms 2.7MB 1623ms 70ms rustc 1.86.0
crystal 1.cr 1901ms 45ms 6.2MB 1870ms 17ms crystal 1.16.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 320ms 0.7ms 2.4MB 293ms 13ms rustc 1.86.0
rust 2.rs 387ms 2.7ms 2.4MB 377ms 0ms rustc 1.86.0
crystal 1.cr 438ms 9.9ms 5.1MB 423ms 0ms crystal 1.16.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 494ms 0.6ms 2.4MB 1910ms 3ms rustc 1.88.0-nightly
rust 7-m.rs 501ms 0.5ms 2.3MB 1937ms 3ms rustc 1.86.0
rust 8.rs 993ms 1.6ms 2.4MB 980ms 0ms rustc 1.88.0-nightly
rust 2-m.rs 1965ms 1.7ms 2.4MB 7730ms 7ms rustc 1.86.0
rust 7.rs 2063ms 2.7ms 2.0MB 2053ms 0ms rustc 1.86.0
crystal 1.cr 3762ms 7.2ms 4.5MB 3753ms 0ms crystal 1.16.0
rust 2.rs 4219ms 3.4ms 2.1MB 4207ms 0ms rustc 1.86.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 128ms 0.1ms 2.4MB 463ms 0ms rustc 1.88.0-nightly
rust 7-m.rs 130ms 0.6ms 2.3MB 473ms 0ms rustc 1.86.0
rust 8.rs 251ms 1.0ms 2.3MB 240ms 0ms rustc 1.88.0-nightly
rust 2-m.rs 495ms 0.3ms 2.1MB 1910ms 7ms rustc 1.86.0
rust 7.rs 521ms 1.8ms 1.8MB 510ms 0ms rustc 1.86.0
crystal 1.cr 950ms 9.5ms 4.3MB 940ms 0ms crystal 1.16.0
rust 2.rs 1059ms 1.2ms 1.9MB 1050ms 0ms rustc 1.86.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 35ms 0.4ms 2.1MB 110ms 0ms rustc 1.88.0-nightly
rust 7-m.rs 36ms 0.2ms 2.1MB 107ms 3ms rustc 1.86.0
rust 8.rs 65ms 1.0ms 2.0MB 57ms 0ms rustc 1.88.0-nightly
rust 2-m.rs 128ms 0.5ms 2.1MB 470ms 0ms rustc 1.86.0
rust 7.rs 133ms 2.1ms 1.9MB 127ms 0ms rustc 1.86.0
crystal 1.cr 240ms 2.6ms 3.8MB 233ms 0ms crystal 1.16.0
rust 2.rs 267ms 1.3ms 1.9MB 257ms 0ms rustc 1.86.0