Kotlin VS Rust benchmarks

Current benchmark data was generated on Sat Jan 28 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz (Model 106)

* -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
kotlin 1.kt 629ms 6.5ms 413.0MB 657ms 77ms kotlin/jvm 17.0.2
rust 4.rs 1788ms 3.0ms 33.6MB 1763ms 13ms rustc 1.67.0
rust 5.rs 1951ms 33ms 33.8MB 1927ms 7ms rustc 1.67.0
rust 3.rs 2134ms 59ms 49.7MB 2097ms 17ms rustc 1.67.0
kotlin 1.kt timeout 0.0ms 282.5MB 8413ms 1150ms kotlin/native 1.8.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 125ms 2.0ms 109.7MB 107ms 27ms kotlin/jvm 17.0.2
rust 4.rs 152ms 0.3ms 5.7MB 137ms 0ms rustc 1.67.0
rust 5.rs 160ms 1.1ms 5.7MB 147ms 0ms rustc 1.67.0
rust 3.rs 177ms 2.9ms 7.8MB 163ms 0ms rustc 1.67.0
kotlin 1-m.kt 494ms 11ms 30.5MB 847ms 77ms kotlin/native 1.8.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 5-m.rs 900ms 109ms 4.6MB 1720ms 40ms rustc 1.67.0
rust 3-m.rs 1004ms 32ms 6.2MB 1893ms 27ms rustc 1.67.0
rust 3.rs 1949ms 13ms 6.2MB 1900ms 30ms rustc 1.67.0
kotlin 1.kt 2892ms 79ms 160.4MB 3693ms 57ms kotlin/jvm 17.0.2
kotlin 2-m.kt 3128ms 450ms 157.4MB 5980ms 57ms kotlin/jvm 17.0.2
rust 1-m.rs 3130ms 25ms 4.9MB 6013ms 97ms rustc 1.67.0
rust 4.rs 3240ms 18ms 4.3MB 3227ms 0ms rustc 1.67.0
kotlin 1.kt timeout 0.0ms 10.8MB 6177ms 300ms kotlin/native 1.8.0
kotlin 2-m.kt timeout 0.0ms 35.0MB 9297ms 150ms kotlin/native 1.8.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 77ms 4.7ms 3.0MB 123ms 3ms rustc 1.67.0
rust 5-m.rs 105ms 2.6ms 2.7MB 177ms 3ms rustc 1.67.0
rust 3.rs 122ms 5.0ms 3.1MB 110ms 0ms rustc 1.67.0
rust 4.rs 210ms 0.9ms 2.4MB 200ms 0ms rustc 1.67.0
rust 1-m.rs 214ms 9.6ms 2.9MB 377ms 13ms rustc 1.67.0
kotlin 1-m.kt 706ms 24ms 99.1MB 1240ms 40ms kotlin/jvm 17.0.2
kotlin 2-m.kt 811ms 15ms 26.1MB 1450ms 33ms kotlin/native 1.8.0
kotlin 1.kt 1032ms 12ms 8.8MB 1270ms 57ms kotlin/native 1.8.0
kotlin 2-m.kt 1082ms 129ms 114.4MB 1967ms 50ms kotlin/jvm 17.0.2

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 2.3ms 0.7ms 1.1MB 0ms 0ms rustc 1.69.0-nightly
rust 1.rs 2.3ms 0.7ms 1.0MB 0ms 0ms rustc 1.67.0
kotlin 1.kt 2.6ms 1.0ms 1.5MB 0ms 0ms kotlin/native 1.8.0
kotlin 1.kt 66ms 1.4ms 40.8MB 50ms 8ms kotlin/jvm 17.0.2

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 169ms 57ms 41.8MB 97ms 97ms rustc 1.67.0
rust 2-http2.rs 370ms 71ms 40.3MB 457ms 133ms rustc 1.67.0
rust 2-m.rs 575ms 15ms 102.4MB 297ms 567ms rustc 1.67.0
rust 1-http2.rs 790ms 152ms 72.3MB 827ms 483ms rustc 1.67.0
kotlin 1.kt timeout 0.0ms 296.5MB 8853ms 617ms kotlin/jvm 17.0.2
kotlin 2.kt timeout 0.0ms 267.6MB 8833ms 673ms kotlin/jvm 17.0.2

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 76ms 10ms 12.2MB 20ms 27ms rustc 1.67.0
rust 2.rs 140ms 11ms 25.0MB 53ms 83ms rustc 1.67.0
rust 2-http2.rs 364ms 79ms 25.2MB 503ms 127ms rustc 1.67.0
rust 1-http2.rs 465ms 13ms 25.8MB 693ms 113ms rustc 1.67.0
kotlin 2-m.kt 2340ms 166ms 198.0MB 3627ms 210ms kotlin/jvm 17.0.2
kotlin 1-m.kt 2612ms 76ms 184.0MB 3997ms 273ms kotlin/jvm 17.0.2

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 82ms 1.2ms 38.0MB 53ms 17ms rustc 1.67.0
rust 3.rs 84ms 0.5ms 36.3MB 60ms 7ms rustc 1.67.0
rust 1.rs 131ms 3.2ms 75.4MB 80ms 37ms rustc 1.67.0
kotlin 1-m.kt 1170ms 37ms 217.4MB 2000ms 90ms kotlin/jvm 17.0.2

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 516ms 2.1ms 258.5MB 390ms 107ms rustc 1.67.0
rust 3.rs 526ms 4.2ms 258.5MB 393ms 113ms rustc 1.67.0
rust 1.rs 909ms 22ms 605.5MB 647ms 247ms rustc 1.67.0
kotlin 1.kt 4233ms 274ms 875.8MB 6110ms 223ms kotlin/jvm 17.0.2

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 62ms 3.5ms 1.0MB 50ms 0ms rustc 1.67.0
rust 1.rs 70ms 0.1ms 1.0MB 60ms 0ms rustc 1.67.0
kotlin 2-m.kt 221ms 5.0ms 113.5MB 323ms 27ms kotlin/jvm 17.0.2
kotlin 1.kt 240ms 5.8ms 109.4MB 290ms 17ms kotlin/jvm 17.0.2
kotlin 2-m.kt 442ms 3.8ms 42.5MB 727ms 13ms kotlin/native 1.8.0
kotlin 1.kt timeout 0.0ms 15.0MB 4993ms 10ms kotlin/native 1.8.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 223ms 4.9ms 1.1MB 210ms 0ms rustc 1.67.0
rust 1.rs 292ms 0.1ms 1.1MB 280ms 0ms rustc 1.67.0
kotlin 2.kt 365ms 4.2ms 132.5MB 460ms 33ms kotlin/jvm 17.0.2
kotlin 1.kt 458ms 3.2ms 132.6MB 507ms 23ms kotlin/jvm 17.0.2
kotlin 2-m.kt 1377ms 6.7ms 145.0MB 2233ms 87ms kotlin/native 1.8.0
kotlin 1.kt timeout 0.0ms 15.0MB 4997ms 0ms kotlin/native 1.8.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 35ms 1.7ms 1.0MB 30ms 0ms rustc 1.67.0
rust 1.rs 47ms 0.2ms 1.0MB 40ms 0ms rustc 1.67.0
kotlin 1.kt 172ms 3.4ms 75.8MB 243ms 10ms kotlin/jvm 17.0.2
kotlin 2.kt 186ms 6.0ms 78.6MB 250ms 27ms kotlin/jvm 17.0.2
kotlin 2-m.kt 224ms 4.4ms 32.4MB 383ms 3ms kotlin/native 1.8.0
kotlin 1.kt timeout 0.0ms 17.1MB 5000ms 7ms kotlin/native 1.8.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 444ms 4.8ms 285.8MB 437ms 57ms kotlin/jvm 17.0.2
rust 1.rs 972ms 14ms 33.7MB 947ms 7ms rustc 1.67.0
kotlin 1-m.kt 2678ms 5.5ms 138.5MB 4327ms 570ms kotlin/native 1.8.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 174ms 3.5ms 221.9MB 160ms 43ms kotlin/jvm 17.0.2
rust 1.rs 197ms 3.3ms 9.9MB 180ms 0ms rustc 1.67.0
kotlin 1-m.kt 516ms 7.8ms 38.4MB 817ms 87ms kotlin/native 1.8.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 257ms 0.3ms 1.1MB 240ms 0ms rustc 1.67.0
rust 7-i.rs 332ms 1.5ms 1.0MB 320ms 0ms rustc 1.67.0
rust 3.rs 340ms 1.3ms 1.1MB 327ms 0ms rustc 1.69.0-nightly
rust 2.rs 340ms 2.9ms 1.0MB 327ms 0ms rustc 1.67.0
rust 1.rs 393ms 3.7ms 1.1MB 383ms 0ms rustc 1.67.0
kotlin 1n.kt 548ms 2.0ms 1.5MB 537ms 0ms kotlin/native 1.8.0
kotlin 1.kt 573ms 6.6ms 42.9MB 570ms 13ms kotlin/jvm 17.0.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 32ms 6.3ms 1.0MB 23ms 0ms rustc 1.67.0
rust 7-i.rs 35ms 0.6ms 1.0MB 23ms 0ms rustc 1.67.0
rust 3.rs 37ms 0.1ms 1.0MB 30ms 0ms rustc 1.69.0-nightly
rust 2.rs 37ms 0.3ms 1.0MB 27ms 0ms rustc 1.67.0
rust 1.rs 41ms 0.8ms 1.1MB 30ms 0ms rustc 1.67.0
kotlin 1n.kt 58ms 1.5ms 1.5MB 47ms 0ms kotlin/native 1.8.0
kotlin 1.kt 140ms 5.3ms 42.7MB 140ms 17ms kotlin/jvm 17.0.2

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 1751ms 1.0ms 2.8MB 1673ms 63ms rustc 1.67.0
rust 1.rs 1842ms 44ms 2.8MB 1687ms 133ms rustc 1.67.0
kotlin 1.kt timeout 0.0ms 218.2MB 5383ms 67ms kotlin/jvm 17.0.2
kotlin 1n.kt timeout 0.0ms 23.1MB 6287ms 170ms kotlin/native 1.8.0
kotlin 2n.kt timeout 0.0ms 10.4MB 5020ms 103ms kotlin/native 1.8.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 391ms 0.8ms 2.5MB 380ms 0ms rustc 1.67.0
rust 1.rs 395ms 7.0ms 2.4MB 363ms 13ms rustc 1.67.0
kotlin 1.kt 1437ms 6.9ms 210.3MB 1770ms 57ms kotlin/jvm 17.0.2
kotlin 1n.kt timeout 0.0ms 18.8MB 6257ms 147ms kotlin/native 1.8.0
kotlin 2n.kt timeout 0.0ms 10.2MB 5017ms 103ms kotlin/native 1.8.0

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7.rs 566ms 9.1ms 77.6MB 713ms 20ms rustc 1.67.0
kotlin 1.kt timeout 0.0ms 159.4MB 5310ms 60ms kotlin/jvm 17.0.2
kotlin 1n.kt timeout 0.0ms 277.3MB 5447ms 763ms kotlin/native 1.8.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7.rs 64ms 0.7ms 11.1MB 73ms 0ms rustc 1.67.0
kotlin 1.kt 1080ms 5.7ms 95.1MB 1430ms 33ms kotlin/jvm 17.0.2
kotlin 1n.kt 4415ms 48ms 65.1MB 5760ms 13ms kotlin/native 1.8.0

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0.rs 150ms 1.9ms 1.0MB 140ms 0ms rustc 1.67.0
rust 1.rs 1857ms 9.0ms 1.0MB 1843ms 0ms rustc 1.67.0
kotlin 1.kt 4451ms 34ms 184.1MB 5353ms 50ms kotlin/jvm 17.0.2

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0.rs 41ms 0.3ms 1.0MB 30ms 0ms rustc 1.67.0
rust 1.rs 467ms 0.8ms 1.0MB 460ms 0ms rustc 1.67.0
kotlin 1-m.kt 1374ms 19ms 184.2MB 2113ms 47ms kotlin/jvm 17.0.2