Crystal VS Nim benchmarks

Current benchmark data was generated on Fri Aug 01 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
nim 2.nim 685ms 7.3ms 36.3MB 667ms 7ms nim 2.2.4
nim 2.nim 978ms 54ms 35.2MB 957ms 3ms nim/clang 2.2.4
crystal 1.cr 1231ms 8.3ms 64.2MB 1203ms 10ms crystal 1.17.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 64ms 2.2ms 6.9MB 53ms 0ms nim 2.2.4
nim 2.nim 93ms 1.9ms 5.8MB 80ms 0ms nim/clang 2.2.4
crystal 1.cr 104ms 1.6ms 11.0MB 90ms 0ms crystal 1.17.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 6.nim 571ms 7.7ms 4.5MB 557ms 0ms nim 2.2.4
nim 6.nim 649ms 37ms 3.3MB 640ms 0ms nim/clang 2.2.4
crystal 1.cr 1489ms 15ms 19.9MB 1420ms 57ms crystal 1.17.0
nim 5.nim 4637ms 30ms 7.6MB 4613ms 10ms nim 2.2.4
nim 1.nim timeout 0.0ms 575.6MB 2617ms 1907ms nim 2.2.4
nim 3.nim timeout 0.0ms 8.8MB 4987ms 3ms nim 2.2.4
nim 1.nim timeout 0.0ms 575.9MB 2610ms 1913ms nim/clang 2.2.4
nim 3.nim timeout 0.0ms 7.0MB 4983ms 0ms nim/clang 2.2.4
nim 5.nim timeout 0.0ms 5.9MB 4970ms 13ms nim/clang 2.2.4

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 6.nim 38ms 0.7ms 3.3MB 30ms 0ms nim 2.2.4
nim 6.nim 43ms 1.2ms 2.1MB 37ms 0ms nim/clang 2.2.4
crystal 1.cr 82ms 4.6ms 7.1MB 57ms 10ms crystal 1.17.0
nim 5.nim 273ms 3.3ms 4.0MB 260ms 0ms nim 2.2.4
nim 5.nim 336ms 0.7ms 2.9MB 320ms 0ms nim/clang 2.2.4
nim 3.nim 884ms 14ms 5.3MB 873ms 0ms nim 2.2.4
nim 3.nim 899ms 4.6ms 4.0MB 887ms 0ms nim/clang 2.2.4
nim 1.nim 4094ms 14ms 519.8MB 2130ms 1533ms nim/clang 2.2.4
nim 1.nim 4098ms 7.4ms 519.7MB 2143ms 1530ms nim 2.2.4

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 57ms 1.8ms 6.5MB 40ms 3ms crystal 1.17.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 22ms 1.7ms 5.3MB 10ms 0ms crystal 1.17.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2510ms 4.1ms 2.9MB 2497ms 0ms crystal 1.17.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 207ms 2.7ms 2.9MB 200ms 0ms crystal 1.17.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 209ms 1.0ms 2.6MB 200ms 0ms nim 2.2.4
nim 2.nim 240ms 0.0ms 1.8MB 230ms 0ms nim/clang 2.2.4
nim 1.nim 535ms 2.6ms 1.8MB 440ms 80ms nim/clang 2.2.4
crystal 2.cr 540ms 2.0ms 3.6MB 450ms 77ms crystal 1.17.0
nim 1.nim 566ms 4.2ms 2.8MB 473ms 80ms nim 2.2.4
crystal 1.cr 681ms 2.0ms 14.6MB 570ms 97ms crystal 1.17.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 24ms 1.0ms 2.6MB 13ms 0ms nim 2.2.4
nim 2.nim 26ms 0.1ms 1.8MB 20ms 0ms nim/clang 2.2.4
nim 1.nim 56ms 1.1ms 1.8MB 40ms 3ms nim/clang 2.2.4
crystal 2.cr 57ms 0.8ms 3.6MB 40ms 0ms crystal 1.17.0
nim 1.nim 59ms 0.1ms 2.6MB 43ms 3ms nim 2.2.4
crystal 1.cr 72ms 0.8ms 4.4MB 53ms 7ms crystal 1.17.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1.1ms 0.0ms 1.9MB 0ms 0ms nim/clang 2.2.4
nim 1.nim 1.6ms 0.2ms 2.6MB 0ms 0ms nim 2.2.4
crystal 1.cr 1.9ms 0.1ms 2.9MB 0ms 0ms crystal 1.17.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1962ms 442ms 300.0MB 300ms 437ms crystal 1.17.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1239ms 102ms 53.0MB 27ms 77ms crystal 1.17.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 37ms 0.9ms 3.0MB 30ms 0ms crystal 1.17.0
crystal 1.cr 70ms 1.9ms 3.0MB 60ms 0ms crystal 1.17.0
nim 2.nim 104ms 1.0ms 2.6MB 97ms 0ms nim 2.2.4
nim 2.nim 110ms 2.5ms 1.9MB 103ms 0ms nim/clang 2.2.4
nim 1.nim timeout 0.0ms 2.6MB 4990ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 1.5MB 4990ms 0ms nim/clang 2.2.4

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 105ms 1.9ms 3.0MB 97ms 0ms crystal 1.17.0
crystal 1.cr 201ms 2.2ms 3.0MB 190ms 0ms crystal 1.17.0
nim 2.nim 306ms 2.9ms 2.6MB 300ms 0ms nim 2.2.4
nim 2.nim 324ms 3.6ms 1.6MB 313ms 0ms nim/clang 2.2.4
nim 1.nim timeout 0.0ms 2.6MB 4990ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 1.5MB 4990ms 0ms nim/clang 2.2.4

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 19ms 1.2ms 3.0MB 10ms 0ms crystal 1.17.0
crystal 1.cr 33ms 1.2ms 3.0MB 20ms 0ms crystal 1.17.0
nim 2.nim 45ms 0.1ms 2.6MB 40ms 0ms nim 2.2.4
nim 2.nim 49ms 1.5ms 1.5MB 40ms 0ms nim/clang 2.2.4
nim 1.nim 364ms 4.5ms 2.6MB 353ms 0ms nim 2.2.4
nim 1.nim 495ms 19ms 1.5MB 487ms 0ms nim/clang 2.2.4

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 288ms 0.3ms 5.9MB 280ms 0ms nim 2.2.4
crystal 1.cr 314ms 1.7ms 9.3MB 303ms 0ms crystal 1.17.0
nim 1.nim 388ms 0.1ms 4.9MB 380ms 0ms nim/clang 2.2.4

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 15ms 0.2ms 2.9MB 10ms 0ms nim 2.2.4
crystal 1.cr 17ms 0.1ms 5.8MB 10ms 0ms crystal 1.17.0
nim 1.nim 19ms 0.6ms 1.9MB 10ms 0ms nim/clang 2.2.4

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 460ms 6.9ms 36.3MB 443ms 10ms nim 2.2.4
nim 1.nim 629ms 11ms 35.2MB 610ms 3ms nim/clang 2.2.4
crystal 1.cr 838ms 12ms 64.2MB 820ms 7ms crystal 1.17.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 95ms 2.9ms 11.0MB 83ms 0ms nim 2.2.4
nim 1.nim 134ms 0.8ms 9.9MB 123ms 0ms nim/clang 2.2.4
crystal 1.cr 177ms 4.2ms 22.3MB 160ms 0ms crystal 1.17.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 319ms 1.0ms 2.9MB 310ms 0ms nim 2.2.4
nim 2.nim 343ms 2.4ms 2.0MB 333ms 0ms nim/clang 2.2.4
crystal 2.cr 345ms 2.9ms 3.4MB 337ms 0ms crystal 1.17.0
crystal 1.cr 346ms 3.1ms 3.4MB 337ms 0ms crystal 1.17.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 34ms 0.2ms 2.9MB 30ms 0ms nim 2.2.4
crystal 2.cr 37ms 0.5ms 3.4MB 30ms 0ms crystal 1.17.0
nim 2.nim 38ms 1.4ms 2.0MB 30ms 0ms nim/clang 2.2.4
crystal 1.cr 39ms 0.1ms 3.4MB 30ms 0ms crystal 1.17.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 274ms 4.6ms 42.9MB 260ms 0ms nim 2.2.4
crystal 2.cr 301ms 3.1ms 8.3MB 290ms 0ms crystal 1.17.0
nim 1.nim 316ms 6.2ms 41.8MB 307ms 0ms nim/clang 2.2.4
crystal 1.cr 420ms 4.6ms 43.0MB 403ms 0ms crystal 1.17.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 52ms 3.2ms 12.8MB 43ms 0ms nim 2.2.4
nim 1.nim 66ms 3.5ms 11.8MB 57ms 0ms nim/clang 2.2.4
crystal 2.cr 74ms 0.2ms 4.5MB 70ms 0ms crystal 1.17.0
crystal 1.cr 89ms 0.6ms 13.2MB 80ms 0ms crystal 1.17.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1960ms 30ms 6.3MB 1927ms 17ms crystal 1.17.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 438ms 11ms 5.0MB 430ms 0ms crystal 1.17.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 3589ms 0.8ms 1.6MB 3580ms 0ms nim/clang 2.2.4
nim 1.nim 3591ms 1.0ms 2.8MB 3580ms 0ms nim 2.2.4
crystal 1.cr 3758ms 11ms 4.5MB 3750ms 0ms crystal 1.17.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 899ms 0.6ms 1.5MB 890ms 0ms nim/clang 2.2.4
nim 1.nim 901ms 1.3ms 2.6MB 890ms 0ms nim 2.2.4
crystal 1.cr 941ms 1.2ms 4.5MB 930ms 0ms crystal 1.17.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 227ms 0.4ms 1.5MB 220ms 0ms nim/clang 2.2.4
nim 1.nim 228ms 1.2ms 2.6MB 220ms 0ms nim 2.2.4
crystal 1.cr 242ms 3.7ms 3.9MB 233ms 0ms crystal 1.17.0