Crystal VS Rust benchmarks

Current benchmark data was generated on Wed May 25 2022, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8272CL 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.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4.rs 1628ms 114ms 33.8MB 1600ms 10ms rustc 1.61.0
rust 5.rs 1902ms 27ms 33.9MB 1867ms 17ms rustc 1.61.0
rust 3.rs 1939ms 119ms 49.8MB 1910ms 13ms rustc 1.61.0
crystal 1.cr 1959ms 5.7ms 64.5MB 2317ms 27ms crystal 1.4.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4.rs 138ms 1.4ms 5.7MB 120ms 0ms rustc 1.61.0
crystal 1.cr 143ms 1.4ms 12.9MB 150ms 0ms crystal 1.4.1
rust 3.rs 166ms 0.5ms 7.7MB 153ms 0ms rustc 1.61.0
rust 5.rs 168ms 1.0ms 5.7MB 160ms 0ms rustc 1.61.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 915ms 27ms 6.3MB 1760ms 17ms rustc 1.61.0
rust 5-m.rs 1033ms 130ms 5.7MB 1983ms 30ms rustc 1.61.0
rust 3.rs 1831ms 4.5ms 6.5MB 1777ms 37ms rustc 1.61.0
crystal 1.cr 2268ms 8.4ms 22.3MB 2203ms 47ms crystal 1.4.1
rust 4.rs 3182ms 1.1ms 4.5MB 3170ms 0ms rustc 1.61.0
rust 1-m.rs 3399ms 14ms 5.8MB 6590ms 83ms rustc 1.61.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 85ms 15ms 3.0MB 137ms 7ms rustc 1.61.0
rust 3.rs 113ms 0.3ms 3.1MB 100ms 0ms rustc 1.61.0
rust 5-m.rs 120ms 13ms 3.2MB 200ms 0ms rustc 1.61.0
crystal 1.cr 126ms 3.3ms 7.6MB 110ms 3ms crystal 1.4.1
rust 4.rs 208ms 0.2ms 2.7MB 200ms 0ms rustc 1.61.0
rust 1-m.rs 234ms 2.8ms 2.8MB 427ms 7ms rustc 1.61.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 74ms 6.3ms 9.1MB 60ms 0ms crystal 1.4.1
rust 1.rs 129ms 10ms 3.6MB 117ms 0ms rustc 1.61.0
rust 2.rs 538ms 2.3ms 3.6MB 527ms 0ms rustc 1.61.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 28ms 1.1ms 5.3MB 13ms 0ms crystal 1.4.1
rust 1.rs 38ms 0.8ms 2.9MB 30ms 0ms rustc 1.61.0
rust 2.rs 89ms 1.0ms 3.3MB 77ms 0ms rustc 1.61.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 614ms 0.3ms 0.7MB 1183ms 0ms rustc 1.61.0
rust 2-im.rs 952ms 10.0ms 0.7MB 1840ms 0ms rustc 1.61.0
rust 5-m.rs 1115ms 2.2ms 0.7MB 2110ms 0ms rustc 1.61.0
rust 3-i.rs 1206ms 0.8ms 0.6MB 1200ms 0ms rustc 1.61.0
rust 2-i.rs 1674ms 0.6ms 0.6MB 1657ms 0ms rustc 1.61.0
rust 1-m.rs 2129ms 3.7ms 0.7MB 4100ms 3ms rustc 1.61.0
rust 1.rs 3896ms 25ms 0.6MB 3880ms 0ms rustc 1.61.0
crystal 1.cr 4207ms 3.7ms 3.1MB 4190ms 0ms crystal 1.4.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 63ms 1.8ms 0.7MB 100ms 0ms rustc 1.61.0
rust 2-im.rs 90ms 1.7ms 2.0MB 150ms 0ms rustc 1.61.0
rust 5-m.rs 99ms 3.9ms 0.6MB 170ms 0ms rustc 1.61.0
rust 3-i.rs 103ms 1.3ms 0.6MB 90ms 0ms rustc 1.61.0
rust 2-i.rs 143ms 1.4ms 0.6MB 130ms 0ms rustc 1.61.0
rust 1-m.rs 192ms 0.8ms 0.7MB 337ms 0ms rustc 1.61.0
rust 1.rs 312ms 22ms 0.6MB 300ms 0ms rustc 1.61.0
crystal 1.cr 321ms 21ms 5.1MB 307ms 0ms crystal 1.4.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 5-m.rs 166ms 1.3ms 2.3MB 287ms 0ms rustc 1.61.0
rust 5c-m.rs 175ms 6.6ms 1.2MB 297ms 0ms rustc 1.63.0
rust 1c.rs 191ms 3.2ms 0.7MB 180ms 0ms rustc 1.63.0
rust 1.rs 234ms 0.2ms 0.6MB 223ms 0ms rustc 1.61.0
crystal 2.cr 757ms 52ms 5.3MB 650ms 90ms crystal 1.4.1
crystal 1.cr 1008ms 2.5ms 14.6MB 893ms 107ms crystal 1.4.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1c.rs 24ms 1.7ms 0.6MB 13ms 0ms rustc 1.63.0
rust 5c-m.rs 26ms 1.8ms 1.3MB 27ms 0ms rustc 1.63.0
rust 5-m.rs 27ms 2.0ms 1.3MB 27ms 0ms rustc 1.61.0
rust 1.rs 27ms 1.1ms 1.9MB 20ms 0ms rustc 1.61.0
crystal 2.cr 80ms 5.6ms 3.6MB 63ms 3ms crystal 1.4.1
crystal 1.cr 106ms 0.8ms 6.7MB 80ms 13ms crystal 1.4.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 2.2ms 0.6ms 2.0MB 0ms 0ms rustc 1.63.0
rust 1.rs 2.4ms 0.5ms 0.6MB 0ms 0ms rustc 1.61.0
crystal 1.cr 3.8ms 0.8ms 2.8MB 0ms 0ms crystal 1.4.1

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 216ms 54ms 47.0MB 120ms 130ms rustc 1.61.0
rust 2-m.rs 557ms 7.6ms 114.0MB 317ms 557ms rustc 1.61.0
rust 1-http2.rs 814ms 173ms 81.0MB 937ms 413ms rustc 1.61.0
crystal 1.cr 3786ms 625ms 130.5MB 420ms 280ms crystal 1.4.1
rust 2-http2.rs timeout 0.0ms 0.0MB 0ms 0ms rustc 1.61.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 75ms 19ms 15.7MB 27ms 23ms rustc 1.61.0
rust 2.rs 135ms 13ms 29.9MB 33ms 103ms rustc 1.61.0
rust 2-http2.rs 292ms 30ms 28.7MB 400ms 87ms rustc 1.61.0
rust 1-http2.rs 365ms 5.4ms 28.5MB 520ms 103ms rustc 1.61.0
crystal 1.cr 1184ms 111ms 35.7MB 50ms 47ms crystal 1.4.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 59ms 7.6ms 0.6MB 47ms 0ms rustc 1.61.0
crystal 0-unsafe.cr 63ms 1.8ms 3.0MB 50ms 0ms crystal 1.4.1
rust 1.rs 77ms 12ms 2.1MB 70ms 0ms rustc 1.61.0
crystal 1.cr 110ms 0.2ms 3.1MB 100ms 0ms crystal 1.4.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 176ms 0.2ms 4.9MB 160ms 0ms crystal 1.4.1
rust 0-unsafe.rs 204ms 28ms 0.6MB 193ms 0ms rustc 1.61.0
rust 1.rs 285ms 29ms 2.2MB 277ms 0ms rustc 1.61.0
crystal 1.cr 323ms 4.4ms 5.1MB 310ms 0ms crystal 1.4.1

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 31ms 2.3ms 3.1MB 20ms 0ms crystal 1.4.1
rust 0-unsafe.rs 32ms 0.5ms 0.6MB 20ms 0ms rustc 1.61.0
rust 1.rs 40ms 0.9ms 0.7MB 30ms 0ms rustc 1.61.0
crystal 1.cr 57ms 1.1ms 5.1MB 47ms 0ms crystal 1.4.1

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 9.rs 362ms 2.1ms 4.9MB 350ms 0ms rustc 1.63.0
rust 8.rs 455ms 0.4ms 4.9MB 443ms 0ms rustc 1.61.0
crystal 1.cr 882ms 4.1ms 7.6MB 867ms 0ms crystal 1.4.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 9.rs 18ms 0.4ms 0.6MB 10ms 0ms rustc 1.63.0
rust 8.rs 22ms 0.8ms 0.6MB 10ms 0ms rustc 1.61.0
crystal 1.cr 42ms 0.8ms 4.9MB 30ms 0ms crystal 1.4.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 817ms 1.1ms 33.8MB 787ms 10ms rustc 1.61.0
crystal 1.cr 1471ms 5.0ms 64.3MB 1713ms 20ms crystal 1.4.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 167ms 1.9ms 9.9MB 153ms 0ms rustc 1.61.0
crystal 1.cr 246ms 2.3ms 17.7MB 260ms 13ms crystal 1.4.1

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 188ms 0.3ms 0.6MB 180ms 0ms rustc 1.61.0
rust 7-i.rs 276ms 22ms 0.6MB 263ms 0ms rustc 1.61.0
rust 3.rs 301ms 0.1ms 0.6MB 290ms 0ms rustc 1.63.0
rust 2.rs 337ms 0.4ms 0.6MB 330ms 0ms rustc 1.61.0
rust 1.rs 408ms 10ms 0.6MB 400ms 0ms rustc 1.61.0
crystal 1.cr 593ms 0.5ms 3.2MB 577ms 0ms crystal 1.4.1
crystal 2.cr 623ms 0.5ms 3.4MB 610ms 0ms crystal 1.4.1

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 23ms 0.4ms 0.6MB 10ms 0ms rustc 1.61.0
rust 7-i.rs 27ms 0.1ms 0.6MB 20ms 0ms rustc 1.61.0
rust 3.rs 32ms 1.3ms 0.6MB 20ms 0ms rustc 1.63.0
rust 2.rs 36ms 2.0ms 0.6MB 30ms 0ms rustc 1.61.0
rust 1.rs 41ms 2.7ms 2.1MB 30ms 0ms rustc 1.61.0
crystal 1.cr 65ms 1.7ms 5.0MB 53ms 0ms crystal 1.4.1
crystal 2.cr 67ms 1.8ms 3.2MB 57ms 0ms crystal 1.4.1

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 451ms 0.3ms 9.9MB 440ms 0ms crystal 1.4.1
rust 2.rs 460ms 2.0ms 6.6MB 440ms 0ms rustc 1.61.0
rust 1.rs 1182ms 8.4ms 40.9MB 1157ms 7ms rustc 1.61.0
crystal 1.cr 1312ms 19ms 44.1MB 1287ms 7ms crystal 1.4.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 101ms 0.1ms 6.3MB 90ms 0ms crystal 1.4.1
rust 2.rs 105ms 1.2ms 3.2MB 90ms 0ms rustc 1.61.0
rust 1.rs 127ms 0.8ms 11.7MB 110ms 0ms rustc 1.61.0
crystal 1.cr 140ms 1.0ms 12.9MB 127ms 0ms crystal 1.4.1

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 1740ms 1.0ms 2.9MB 1573ms 147ms rustc 1.61.0
rust 2.rs 1804ms 7.3ms 2.7MB 1733ms 60ms rustc 1.61.0
crystal 1.cr 2792ms 50ms 8.8MB 3063ms 283ms crystal 1.4.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 375ms 1.1ms 2.7MB 353ms 7ms rustc 1.61.0
rust 2.rs 408ms 1.2ms 2.5MB 400ms 0ms rustc 1.61.0
crystal 1.cr 645ms 7.0ms 7.5MB 663ms 83ms crystal 1.4.1

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 872ms 1.5ms 2.6MB 1613ms 3ms rustc 1.63.0
rust 7-m.rs 893ms 2.6ms 2.2MB 1717ms 0ms rustc 1.61.0
rust 8.rs 1518ms 1.1ms 2.5MB 1510ms 0ms rustc 1.63.0
rust 2-m.rs 1706ms 54ms 2.1MB 3290ms 7ms rustc 1.61.0
rust 7.rs 1722ms 3.0ms 2.2MB 1710ms 0ms rustc 1.61.0
crystal 1.cr timeout 0.0ms 0.0MB 0ms 0ms crystal 1.4.1
rust 2.rs timeout 0.0ms 0.0MB 0ms 0ms rustc 1.61.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 220ms 6.5ms 2.4MB 397ms 0ms rustc 1.63.0
rust 7-m.rs 233ms 1.5ms 0.7MB 423ms 0ms rustc 1.61.0
rust 7.rs 416ms 29ms 0.6MB 403ms 0ms rustc 1.61.0
rust 8.rs 432ms 0.5ms 2.2MB 420ms 0ms rustc 1.63.0
rust 2-m.rs 435ms 7.8ms 2.3MB 820ms 0ms rustc 1.61.0
rust 2.rs 1371ms 0.7ms 0.6MB 1360ms 0ms rustc 1.61.0
crystal 1.cr 1386ms 101ms 6.1MB 1370ms 0ms crystal 1.4.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 60ms 1.7ms 2.3MB 100ms 0ms rustc 1.63.0
rust 7-m.rs 64ms 0.6ms 0.7MB 100ms 0ms rustc 1.61.0
rust 7.rs 103ms 7.6ms 0.6MB 93ms 0ms rustc 1.61.0
rust 8.rs 107ms 6.1ms 2.2MB 97ms 0ms rustc 1.63.0
rust 2-m.rs 115ms 3.3ms 0.7MB 200ms 0ms rustc 1.61.0
crystal 1.cr 381ms 1.7ms 3.8MB 370ms 0ms crystal 1.4.1
rust 2.rs 391ms 0.6ms 0.6MB 380ms 0ms rustc 1.61.0