Rust VS Crystal benchmarks

Current benchmark data was generated on Wed Feb 08 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz (Model 85)

* -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.)

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 5c-m.rs 212ms 1.9ms 1.7MB 370ms 7ms rustc 1.69.0-nightly
rust 5-m.rs 224ms 5.8ms 1.7MB 400ms 0ms rustc 1.67.0
rust 1c.rs 257ms 0.4ms 1.0MB 247ms 0ms rustc 1.69.0-nightly
rust 1.rs 314ms 1.1ms 1.0MB 307ms 0ms rustc 1.67.0
crystal 2.cr 873ms 17ms 3.1MB 757ms 100ms crystal 1.7.2
crystal 1.cr 1124ms 3.1ms 14.6MB 967ms 137ms crystal 1.7.2

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1c.rs 29ms 0.8ms 1.0MB 20ms 0ms rustc 1.69.0-nightly
rust 5-m.rs 32ms 0.5ms 1.7MB 40ms 0ms rustc 1.67.0
rust 5c-m.rs 33ms 3.0ms 1.7MB 37ms 3ms rustc 1.69.0-nightly
rust 1.rs 35ms 2.0ms 1.0MB 23ms 0ms rustc 1.67.0
crystal 2.cr 91ms 0.9ms 3.2MB 73ms 7ms crystal 1.7.2
crystal 1.cr 117ms 0.6ms 4.5MB 90ms 17ms crystal 1.7.2

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 2.5ms 0.6ms 1.9MB 0ms 0ms rustc 1.67.0
crystal 1.cr 2.6ms 0.5ms 3.0MB 0ms 0ms crystal 1.7.2
rust 1.rs 2.6ms 0.8ms 1.0MB 0ms 0ms rustc 1.69.0-nightly

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 9.rs 435ms 4.1ms 4.9MB 423ms 0ms rustc 1.69.0-nightly
crystal 1.cr 492ms 4.7ms 9.8MB 480ms 0ms crystal 1.7.2
rust 8.rs 512ms 3.2ms 4.9MB 497ms 0ms rustc 1.67.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 9.rs 20ms 0.1ms 1.0MB 10ms 0ms rustc 1.69.0-nightly
rust 8.rs 25ms 1.2ms 1.0MB 13ms 0ms rustc 1.67.0
crystal 1.cr 26ms 0.0ms 6.7MB 13ms 0ms crystal 1.7.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 255ms 0.3ms 1.0MB 237ms 0ms rustc 1.67.0
rust 7-i.rs 376ms 6.0ms 1.0MB 363ms 0ms rustc 1.67.0
rust 3.rs 404ms 0.9ms 1.1MB 390ms 0ms rustc 1.69.0-nightly
rust 2.rs 446ms 30ms 1.1MB 433ms 0ms rustc 1.67.0
rust 1.rs 503ms 8.7ms 1.1MB 490ms 0ms rustc 1.67.0
crystal 1.cr 670ms 3.5ms 2.9MB 657ms 0ms crystal 1.7.2
crystal 2.cr 694ms 9.6ms 3.0MB 683ms 0ms crystal 1.7.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 29ms 0.5ms 1.0MB 20ms 0ms rustc 1.67.0
rust 7-i.rs 41ms 0.3ms 1.0MB 30ms 0ms rustc 1.67.0
rust 3.rs 43ms 0.1ms 1.0MB 30ms 0ms rustc 1.69.0-nightly
rust 2.rs 45ms 0.5ms 1.0MB 37ms 0ms rustc 1.67.0
rust 1.rs 55ms 4.2ms 1.0MB 43ms 0ms rustc 1.67.0
crystal 1.cr 73ms 1.3ms 3.0MB 60ms 0ms crystal 1.7.2
crystal 2.cr 79ms 4.1ms 2.9MB 70ms 0ms crystal 1.7.2

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 1083ms 2.6ms 2.5MB 2073ms 3ms rustc 1.69.0-nightly
rust 7-m.rs 1085ms 14ms 2.1MB 2083ms 0ms rustc 1.67.0
rust 8.rs 2075ms 12ms 2.4MB 2067ms 0ms rustc 1.69.0-nightly
rust 7.rs 2099ms 40ms 2.2MB 2080ms 0ms rustc 1.67.0
rust 2-m.rs 2234ms 16ms 2.3MB 4307ms 3ms rustc 1.67.0
crystal 1.cr timeout 0.0ms 4.0MB 4977ms 3ms crystal 1.7.2
rust 2.rs timeout 0.0ms 2.0MB 4987ms 0ms rustc 1.67.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7-m.rs 280ms 0.9ms 1.1MB 513ms 0ms rustc 1.67.0
rust 8-m.rs 280ms 2.6ms 2.2MB 510ms 0ms rustc 1.69.0-nightly
rust 7.rs 523ms 1.8ms 1.1MB 510ms 0ms rustc 1.67.0
rust 2-m.rs 561ms 0.8ms 2.1MB 1063ms 0ms rustc 1.67.0
rust 8.rs 565ms 14ms 2.1MB 553ms 0ms rustc 1.69.0-nightly
crystal 1.cr 1847ms 33ms 3.7MB 1837ms 0ms crystal 1.7.2
rust 2.rs 1966ms 23ms 1.0MB 1950ms 0ms rustc 1.67.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 77ms 1.9ms 1.1MB 127ms 0ms rustc 1.69.0-nightly
rust 7-m.rs 79ms 1.6ms 1.0MB 123ms 0ms rustc 1.67.0
rust 8.rs 137ms 2.1ms 1.1MB 123ms 0ms rustc 1.69.0-nightly
rust 7.rs 138ms 2.1ms 1.1MB 130ms 0ms rustc 1.67.0
rust 2-m.rs 151ms 2.4ms 1.0MB 267ms 0ms rustc 1.67.0
crystal 1.cr 466ms 4.6ms 3.6MB 453ms 0ms crystal 1.7.2
rust 2.rs 491ms 0.1ms 1.0MB 480ms 0ms rustc 1.67.0

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4.rs 2015ms 13ms 33.7MB 1983ms 13ms rustc 1.67.0
rust 5.rs 2208ms 16ms 33.7MB 2180ms 13ms rustc 1.67.0
rust 3.rs 2379ms 46ms 49.8MB 2343ms 17ms rustc 1.67.0
crystal 1.cr 2438ms 1.7ms 64.3MB 2393ms 23ms crystal 1.7.2

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4.rs 179ms 1.1ms 5.7MB 170ms 0ms rustc 1.67.0
crystal 1.cr 185ms 11ms 11.0MB 167ms 0ms crystal 1.7.2
rust 5.rs 200ms 2.5ms 5.8MB 183ms 0ms rustc 1.67.0
rust 3.rs 211ms 2.3ms 7.7MB 190ms 0ms rustc 1.67.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 1161ms 4.4ms 6.2MB 2220ms 23ms rustc 1.67.0
rust 5-m.rs 1222ms 11ms 4.4MB 2347ms 30ms rustc 1.67.0
rust 3.rs 2254ms 3.6ms 6.2MB 2200ms 37ms rustc 1.67.0
crystal 1.cr 2418ms 41ms 20.3MB 2357ms 37ms crystal 1.7.2
rust 4.rs 3557ms 11ms 4.5MB 3540ms 0ms rustc 1.67.0
rust 1-m.rs 3918ms 52ms 4.9MB 7567ms 110ms rustc 1.67.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 105ms 17ms 2.9MB 173ms 7ms rustc 1.67.0
crystal 1.cr 136ms 1.4ms 7.2MB 120ms 3ms crystal 1.7.2
rust 3.rs 140ms 0.7ms 3.2MB 127ms 0ms rustc 1.67.0
rust 5-m.rs 141ms 26ms 2.7MB 243ms 7ms rustc 1.67.0
rust 4.rs 235ms 1.7ms 2.3MB 223ms 0ms rustc 1.67.0
rust 1-m.rs 271ms 6.3ms 2.9MB 480ms 13ms rustc 1.67.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 95ms 7.6ms 6.4MB 80ms 3ms crystal 1.7.2
rust 1.rs 165ms 0.5ms 3.6MB 150ms 0ms rustc 1.67.0
rust 2.rs 685ms 1.5ms 3.8MB 673ms 0ms rustc 1.67.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 32ms 0.7ms 5.3MB 20ms 0ms crystal 1.7.2
rust 1.rs 46ms 0.8ms 2.9MB 37ms 0ms rustc 1.67.0
rust 2.rs 133ms 0.6ms 3.1MB 120ms 0ms rustc 1.67.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 750ms 1.1ms 1.0MB 1453ms 0ms rustc 1.67.0
rust 2-im.rs 1071ms 12ms 1.0MB 2070ms 0ms rustc 1.67.0
rust 5-m.rs 1427ms 22ms 1.1MB 2730ms 0ms rustc 1.67.0
rust 3-i.rs 1492ms 23ms 1.0MB 1473ms 0ms rustc 1.67.0
rust 2-i.rs 2205ms 4.9ms 1.0MB 2193ms 0ms rustc 1.67.0
rust 1-m.rs 2866ms 4.7ms 1.0MB 5527ms 0ms rustc 1.67.0
crystal 1.cr 4460ms 4.4ms 3.0MB 4447ms 0ms crystal 1.7.2
rust 1.rs 4707ms 34ms 1.0MB 4693ms 0ms rustc 1.67.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 70ms 0.7ms 1.0MB 117ms 0ms rustc 1.67.0
rust 2-im.rs 100ms 3.0ms 1.1MB 170ms 0ms rustc 1.67.0
rust 5-m.rs 125ms 1.7ms 1.0MB 220ms 0ms rustc 1.67.0
rust 3-i.rs 126ms 0.8ms 1.1MB 117ms 0ms rustc 1.67.0
rust 2-i.rs 191ms 8.6ms 1.1MB 183ms 0ms rustc 1.67.0
rust 1-m.rs 258ms 4.6ms 1.1MB 453ms 3ms rustc 1.67.0
crystal 1.cr 372ms 15ms 3.0MB 360ms 0ms crystal 1.7.2
rust 1.rs 394ms 1.2ms 1.1MB 383ms 0ms rustc 1.67.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 180ms 40ms 31.1MB 103ms 113ms rustc 1.67.0
rust 2-http2.rs 476ms 145ms 45.3MB 680ms 150ms rustc 1.67.0
rust 2-m.rs 614ms 14ms 105.6MB 340ms 603ms rustc 1.67.0
rust 1-http2.rs 1093ms 130ms 68.5MB 1283ms 613ms rustc 1.67.0
crystal 1.cr 3606ms 81ms 193.5MB 693ms 417ms crystal 1.7.2

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 65ms 31ms 14.1MB 10ms 40ms rustc 1.67.0
rust 2.rs 137ms 5.4ms 22.4MB 30ms 107ms rustc 1.67.0
rust 2-http2.rs 353ms 76ms 22.7MB 487ms 107ms rustc 1.67.0
rust 1-http2.rs 457ms 18ms 25.5MB 650ms 127ms rustc 1.67.0
crystal 1.cr 1299ms 5.5ms 43.4MB 73ms 63ms crystal 1.7.2

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 96ms 3.0ms 38.1MB 70ms 10ms rustc 1.67.0
rust 3.rs 96ms 2.4ms 36.2MB 73ms 10ms rustc 1.67.0
rust 1.rs 154ms 1.7ms 75.4MB 100ms 40ms rustc 1.67.0

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 598ms 0.3ms 257.9MB 460ms 120ms rustc 1.67.0
rust 3.rs 611ms 20ms 258.6MB 460ms 137ms rustc 1.67.0
rust 1.rs 1117ms 11ms 605.2MB 760ms 340ms rustc 1.67.0

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 422ms 12ms 28.2MB 733ms 17ms rustc 1.67.0
rust 8.rs 743ms 40ms 23.3MB 710ms 13ms rustc 1.67.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 57ms 1.0ms 15.7MB 77ms 3ms rustc 1.67.0
rust 8.rs 88ms 3.3ms 11.6MB 70ms 7ms rustc 1.67.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 65ms 6.5ms 1.8MB 57ms 0ms rustc 1.67.0
crystal 0-unsafe.cr 69ms 3.1ms 3.0MB 57ms 0ms crystal 1.7.2
rust 1.rs 90ms 3.6ms 2.1MB 80ms 0ms rustc 1.67.0
crystal 1.cr 113ms 1.8ms 3.0MB 100ms 0ms crystal 1.7.2

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 195ms 4.7ms 3.0MB 180ms 0ms crystal 1.7.2
rust 0-unsafe.rs 258ms 14ms 1.1MB 243ms 0ms rustc 1.67.0
crystal 1.cr 324ms 1.4ms 3.0MB 310ms 0ms crystal 1.7.2
rust 1.rs 369ms 2.5ms 1.0MB 360ms 0ms rustc 1.67.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 36ms 2.2ms 2.9MB 23ms 0ms crystal 1.7.2
rust 0-unsafe.rs 40ms 2.7ms 1.1MB 30ms 0ms rustc 1.67.0
crystal 1.cr 56ms 0.1ms 2.9MB 47ms 0ms crystal 1.7.2
rust 1.rs 60ms 1.7ms 1.0MB 50ms 0ms rustc 1.67.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 1082ms 5.4ms 33.7MB 1050ms 17ms rustc 1.67.0
crystal 1.cr 1790ms 9.6ms 64.3MB 1750ms 17ms crystal 1.7.2

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 226ms 4.6ms 9.9MB 207ms 0ms rustc 1.67.0
crystal 1.cr 320ms 17ms 22.1MB 300ms 7ms crystal 1.7.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 497ms 1.2ms 6.6MB 480ms 0ms rustc 1.67.0
crystal 2.cr 513ms 4.0ms 7.8MB 500ms 0ms crystal 1.7.2
rust 1.rs 1080ms 27ms 40.8MB 1050ms 13ms rustc 1.67.0
crystal 1.cr 1150ms 55ms 41.9MB 1130ms 7ms crystal 1.7.2

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 111ms 0.5ms 3.1MB 100ms 0ms rustc 1.67.0
crystal 2.cr 117ms 2.4ms 4.1MB 103ms 0ms crystal 1.7.2
rust 1.rs 147ms 6.8ms 11.6MB 133ms 0ms rustc 1.67.0
crystal 1.cr 175ms 1.0ms 12.9MB 160ms 0ms crystal 1.7.2

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 1979ms 8.1ms 2.7MB 1890ms 73ms rustc 1.67.0
rust 1.rs 2064ms 22ms 2.8MB 1870ms 173ms rustc 1.67.0
crystal 1.cr 3260ms 137ms 7.4MB 3223ms 20ms crystal 1.7.2

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 441ms 3.4ms 2.4MB 423ms 0ms rustc 1.67.0
rust 2.rs 459ms 11ms 2.5MB 447ms 0ms rustc 1.67.0
crystal 1.cr 703ms 27ms 5.8MB 677ms 10ms crystal 1.7.2

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7.rs 672ms 6.4ms 77.6MB 867ms 30ms rustc 1.67.0
crystal 1.cr 2759ms 1.3ms 174.0MB 2687ms 57ms crystal 1.7.2

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7.rs 74ms 3.0ms 11.6MB 87ms 0ms rustc 1.67.0
crystal 1.cr 287ms 1.0ms 32.1MB 260ms 10ms crystal 1.7.2

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0.rs 164ms 0.4ms 1.1MB 153ms 0ms rustc 1.67.0
rust 1.rs 2258ms 26ms 1.1MB 2243ms 0ms rustc 1.67.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0.rs 45ms 1.5ms 1.1MB 33ms 0ms rustc 1.67.0
rust 1.rs 559ms 2.7ms 1.1MB 550ms 0ms rustc 1.67.0