Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions fibonacci/fish/code.fish
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/usr/bin/env fish

function fibonacci
if test $argv[1] -eq 0
echo 0
else if test $argv[1] -eq 1
echo 1
else
echo (fibonacci (math $argv[1] - 1)) + (fibonacci (math $argv[1] - 2))
end
end

set -l u (math $argv[1] - 1)
set -l r 0
for i in (seq 0 $u)
set r (math $r + (fibonacci $i))
end
echo $r
16 changes: 16 additions & 0 deletions loops/fish/code.fish
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/usr/bin/env fish

set -l u (math $argv[1])
set -l r (math (random) % 10000)
set -l a
for i in (seq 10000)
set -a a 0
end

for i in (seq 10000)
for j in (seq 100000)
set a[$i] (math $a[$i] + $j % $u)
end
set a[$i] (math $a[$i] + $r)
end
echo $a[$r]
83 changes: 51 additions & 32 deletions run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -169,35 +169,54 @@ function run_benchmark {
echo "Done running $(basename ${PWD}) benchmark"
}

available_benchmarks=("loops" "fibonacci" "levenshtein" "hello-world")
benchmarks_to_run_paths=()
current_benchmark=$(basename "${PWD}")

benchmark_found=false
for benchmark in "${available_benchmarks[@]}"; do
if [[ "${benchmark}" == "${current_benchmark}" ]]; then
benchmark_found=true
break
fi
done

if [ "${benchmark_found}" = true ]; then # regular, single, benchmark run
benchmarks_to_run_paths=("${PWD}")
else # run all benchmarks
benchmarks_to_run=()
for benchmark in "${available_benchmarks[@]}"; do
unset override_input_value # Custom input arg doesn't work for this run type
if [ -d "${PWD}/${benchmark}" ]; then
benchmarks_to_run+=("${benchmark}")
benchmarks_to_run_paths+=("${PWD}/${benchmark}")
fi
done
echo "Running benchmarks: ${benchmarks_to_run[*]}"
fi

for benchmark_dir in "${benchmarks_to_run_paths[@]}"; do
echo
run_benchmark "${benchmark_dir}"
done

echo "Results were written to: ${results_file}"
run "Dart" "./dart/code 40"
run "Objective-C" "./objc/code 40"
run "Kotlin JVM" "java -jar kotlin/code.jar 40"
run "Kotlin Native" "./kotlin/code.kexe 40"
run "C" "./c/code 40"
run "Rust" "./rust/target/release/code 40"
run "Node" "node ./js/code.js 40"
run "Bun" "bun ./js/code.js 40"
run "Bun (Compiled)" "./js/bun 40"
run "Deno" "deno ./js/code.js 40"
run "PyPy" "pypy ./py/code.py 40"
run "CPP" "./cpp/code 40"
run "Go" "./go/code 40"
run "Node (jitless)" "node --jitless ./js/code.js 40"
run "Bun (jitless)" "bun ./js/code.js 40" "BUN_JSC_useJIT=0"
run "Deno (jitless)" "deno --v8-flags=--jitless ./js/code.js 40"
run "PyPy" "pypy ./py/code.py 40"
run "Java" "java jvm.code 40"
#run "Java GraalVM" "./jvm.code 40"
run "Scala" "./scala/code 40"
run "Ruby" "ruby ./ruby/code.rb 40"
run "PHP JIT" "php -dopcache.enable_cli=1 -dopcache.jit=on -dopcache.jit_buffer_size=64M ./php/code.php 40"
run "PHP" "php ./php/code.php 40"
run "R" "Rscript ./r/code.R 40"
run "Python" "python3.13 ./py/code.py 40"
run "Common Lisp" "common-lisp/code 40"
run "Zig" "./zig/code 40"
run "Inko" "./inko/code 40"
run "Nim" "./nim/code 40"
run "Free Pascal" "./fpc/code 40"
run "Crystal" "./crystal/code 40"
#run "Ada" "./ada/code 40"
#run "D" "./d/code 40" # Seems to not have an arm / M1 version
run "Odin" "./odin/code 40"
run "Fortran" "./fortran/code 40"
run "LuaJIT" "luajit ./lua/code 40"
run "Lua" "lua ./lua/code.lua 40"
run "Swift" "./swift/code 40"
run "Julia" "julia ./julia/code.jl 40"
#run "Haxe JVM" "java -jar haxe/code.jar 40" # was getting errors running `haxelib install hxjava`
run "Elixir" "elixir elixir/bench.exs 40"
#run "C# AOT" "./csharp-aot/code/csharp 40"
run "C#" "./csharp/code/csharp 40"
run "Ruby" "ruby ./ruby/code.rb 40"
run "Ruby YJIT" "miniruby --yjit ./ruby/code.rb 40"
run "Haskell" "./hs/code 40"
run "AWK" "awk -f ./awk/code.awk 40"
run "MAWK" "mawk -f ./awk/code.awk 40"
run "Clojure" "java -cp clojure/classes:$(clojure -Spath) code 40"
run "Babashka" "bb -cp clojure -m code 40"
run "Fish" "./fish/code.fish 40"