Skip to content

Instantly share code, notes, and snippets.

ruby plot.rb hyperfine-reports/ReMonkey-vs-fix.json
┌ ┐
bun run ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 36.20822896125999
node ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 18.28332402666
deno run ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 17.428708521759997
bun run ReMonkey-fix/ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 21.28789858106
node ReMonkey-fix/ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 13.006424763559997
deno run ReMonkey-fix/ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 12.832925556459998
hyperfine -w 3 -i 'bun run ReMonkey/src/Benchmark.res.mjs' 'node ReMonkey/src/Benchmark.res.mjs' 'deno run ReMonkey/src/Benchmark.res.mjs' 'bun run ReMonkey-fix/ReMonkey/src/Benchmark.res.mjs' 'node ReMonkey-fix/ReMonkey/src/Benchmark.res.mjs' 'deno run ReMonkey-fix/ReMonkey/src/Benchmark.res.mjs' --export-json hyperfine-reports/ReMonkey-vs-fix.json
Benchmark 1: bun run ReMonkey/src/Benchmark.res.mjs
Time (mean ± σ): 36.208 s ± 0.264 s [User: 37.082 s, System: 2.422 s]
Range (min … max): 35.862 s … 36.667 s 10 runs
Benchmark 2: node ReMonkey/src/Benchmark.res.mjs
Time (mean ± σ): 18.283 s ± 0.110 s [User: 18.300 s, System: 0.117 s]
Range (min … max): 18.161 s … 18.503 s 10 runs
Benchmark 3: deno run ReMonkey/src/Benchmark.res.mjs
ruby plot.rb hyperfine-reports/JS-total-showdown-v2.js
┌ ┐
bun run ../ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 35.96237350322001
node ../ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 18.156409287819997
deno run ../ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 17.336384496119997
bun run ../TSMonkey/benchmark.js ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 16.85066295362
node ../TSMonkey/benchmark.js ┤■■■■■■■■■■■■■■■■■■■■ 11.24885970422
./benchmarks-bun.sh eval-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 32.26604655792
./benchmarks-node.sh eval-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 31.86506350702
./benchmarks-deno.sh eval-fast ┤■■■■■■■■■■■■■■■■■■■■■■■
hyperfine -w 3 -i 'bun run ../ReMonkey/src/Benchmark.res.mjs' 'node ../ReMonkey/src/Benchmark.res.mjs' 'deno run ../ReMonkey/src/Benchmark.res.mjs' 'bun run ../TSMonkey/benchmark.js' 'node ../TSMonkey/benchmark.js' './benchmarks-bun.sh eval-fast' './benchmarks-node.sh eval-fast' './benchmarks-deno.sh eval-fast' --export-json ../hyperfine-reports/JS-total-showdown-v2.js
Benchmark 1: bun run ../ReMonkey/src/Benchmark.res.mjs
Time (mean ± σ): 35.962 s ± 0.312 s [User: 36.652 s, System: 2.212 s]
Range (min … max): 35.464 s … 36.424 s 10 runs
Benchmark 2: node ../ReMonkey/src/Benchmark.res.mjs
Time (mean ± σ): 18.156 s ± 0.235 s [User: 18.160 s, System: 0.126 s]
Range (min … max): 17.720 s … 18.514 s 10 runs
Benchmark 3: deno run ../ReMonkey/src/Benchmark.res.mjs
❯ ruby plot.rb hyperfine-reports/JS-total-showdown.js
┌ ┐
bun run ../ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 35.83784912246
node ../ReMonkey/src/Benchmark.res.mjs ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 18.18417210286
bun run ../TSMonkey/benchmark.js ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 16.30219026496
node ../TSMonkey/benchmark.js ┤■■■■■■■■■■■■■■■■■■■■■■■■■■ 11.29732625396
./benchmarks-bun.sh eval-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 32.16708024236
./benchmarks-node.sh eval-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 32.03700059456
❯ hyperfine -w 3 'bun run ../ReMonkey/src/Benchmark.res.mjs' 'node ../ReMonkey/src/Benchmark.res.mjs' 'bun run ../TSMonkey/benchmark.js' 'node ../TSMonkey/benchmark.js' './benchmarks-bun.sh eval-fast' './benchmarks-node.sh eval-fast' --export-json ../hyperfine-reports/JS-total-showdown.js
Benchmark 1: bun run ../ReMonkey/src/Benchmark.res.mjs
Time (mean ± σ): 35.838 s ± 0.203 s [User: 36.609 s, System: 2.151 s]
Range (min … max): 35.598 s … 36.228 s 10 runs
Benchmark 2: node ../ReMonkey/src/Benchmark.res.mjs
Time (mean ± σ): 18.184 s ± 0.116 s [User: 18.195 s, System: 0.119 s]
Range (min … max): 17.932 s … 18.341 s 10 runs
Benchmark 3: bun run ../TSMonkey/benchmark.js
let rec eval = (program: AST.program, env: environment) => {
let result: ref<option<mObject>> = ref(None)
let keep = ref(true)
program.statements->Array.forEach(statement => {
if keep.contents {
result := evaluateStatement(Some(statement), env)
result.contents->Option.forEach(contents => {
switch contents {
| MReturnValue({value}) => {
fun eval(program: Program, env: Environment): MObject? {
var result: MObject? = null
for (statement in program.statements) {
result = eval(statement, env)
when (result) {
is MReturnValue -> return result.value
is MError -> return result
}
}
❯ ruby --yjit plot.rb kotlin-wasm-eval-fast.json
┌ ┐
./benchmarks-bun.sh eval-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 34.566014226200004
./benchmarks-jvm.sh eval-fast ┤■■■■■■■■ 3.6206429516
./benchmarks-native.sh eval-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 16.9771580748
./benchmarks-node.sh eval-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 32.925853603600004
./benchmarks-wasm-wasi.sh eval-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■ 11.295171940900001
./benchmarks-wasm-js.sh eval-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■ 11.3097880403
└ ┘
❯ ruby --yjit plot.rb kotlin-wasm-vm-fast.json
┌ ┐
./benchmarks-bun.sh vm-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 22.704543833360002
./benchmarks-jvm.sh vm-fast ┤■■■■■■■■■■■■■■■■■■ 5.12403986566
./benchmarks-native.sh vm-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 10.128824652159999
./benchmarks-node.sh vm-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 22.852397735060002
./benchmarks-wasm-wasi.sh vm-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 15.80210154176
./benchmarks-wasm-js.sh vm-fast ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 17.04475952096