Cross-language benchmark results

Generated by tests/compare/harness.py. The benchmarks and the rules they follow are in SPEC.md. Do not edit this file by hand.

Seconds, lower is better

configuration nbody raytrace interp sort astar total
lobster/cpp-clang 0.1475 0.0516 0.3379 0.1753 0.1412 0.8534
cpp/msvc-ltcg 0.1463 0.0498 0.3721 0.1577 0.1408 0.8667
cpp/clang-lto 0.1471 0.0469 0.3710 0.1563 0.1520 0.8734
csharp/jit 0.1463 0.0530 0.3141 0.1832 0.1802 0.8768
cpp/msvc-o2 0.1473 0.0502 0.3719 0.1597 0.1479 0.8769
cpp/clang-o2 0.1475 0.0470 0.3753 0.1549 0.1546 0.8792
rust/o3-lto 0.1471 0.0469 0.3895 0.1682 0.1502 0.9019
rust/o3 0.1472 0.0465 0.4002 0.1678 0.1539 0.9157
lobster/cpp-msvc 0.1468 0.0902 0.4213 0.1679 0.1606 0.9868
lobster/mir2 0.1475 0.1755 0.2720 0.2119 0.2308 1.0375
go/nobounds 0.3060 0.0728 0.3247 0.2297 0.1507 1.0839
go/default 0.3061 0.0745 0.3263 0.2315 0.1582 1.0967
java/default 0.2225 0.0531 0.4220 0.3092 0.1990 1.2058
lobster/libtcc 0.4477 0.3823 0.3067 0.4815 0.4136 2.0318
lua/luajit 0.1460 0.0770 1.0830 0.3370 0.5540 2.1970
node/default 0.5318 0.1543 0.8735 0.5009 0.3668 2.4273
lua/lua55 2.3340 1.7440 2.2100 1.6410 2.8830 10.8120
python/cpython 9.5140 7.9053 2.7863 8.7990 11.6987 40.7033

Relative to the best configuration, per benchmark and overall

configuration nbody raytrace interp sort astar total
lobster/cpp-clang 1.01x 1.11x 1.24x 1.13x 1.00x 1.00x
cpp/msvc-ltcg 1.00x 1.07x 1.37x 1.02x 1.00x 1.02x
cpp/clang-lto 1.01x 1.01x 1.36x 1.01x 1.08x 1.02x
csharp/jit 1.00x 1.14x 1.15x 1.18x 1.28x 1.03x
cpp/msvc-o2 1.01x 1.08x 1.37x 1.03x 1.05x 1.03x
cpp/clang-o2 1.01x 1.01x 1.38x 1.00x 1.10x 1.03x
rust/o3-lto 1.01x 1.01x 1.43x 1.09x 1.07x 1.06x
rust/o3 1.01x 1.00x 1.47x 1.08x 1.09x 1.07x
lobster/cpp-msvc 1.01x 1.94x 1.55x 1.08x 1.14x 1.16x
lobster/mir2 1.01x 3.77x 1.00x 1.37x 1.64x 1.22x
go/nobounds 2.10x 1.56x 1.19x 1.48x 1.07x 1.27x
go/default 2.10x 1.60x 1.20x 1.49x 1.12x 1.29x
java/default 1.52x 1.14x 1.55x 2.00x 1.41x 1.41x
lobster/libtcc 3.07x 8.22x 1.13x 3.11x 2.94x 2.38x
lua/luajit 1.00x 1.66x 3.98x 2.18x 3.93x 2.57x
node/default 3.64x 3.32x 3.21x 3.23x 2.60x 2.84x
lua/lua55 15.99x 37.49x 8.13x 10.59x 20.47x 12.67x
python/cpython 65.16x 169.92x 10.24x 56.81x 83.07x 47.70x

Checksums

benchmark value
nbody -363.2975526244576
raytrace 293236.6121816068
interp 34261.55440963025
sort 3921154570766.0
astar 20442634156.0

Configurations

configuration status notes
lobster/libtcc ok the default backend: C generated by the compiler, compiled by libtcc
lobster/mir2 ok MIR JIT at its -O2
lobster/cpp-msvc ok --cpp, MSVC /O2 /Oi /Ot /GL (the shipped project settings)
lobster/cpp-clang ok --cpp, clang-cl /O2 -ffp-contract=off on the generated code, MSVC-built runtime
cpp/msvc-o2 ok MSVC /O2 /Oi /Ot /fp:precise
cpp/msvc-ltcg ok MSVC /O2 plus whole-program optimisation
cpp/clang-o2 ok clang-cl /O2 -ffp-contract=off
cpp/clang-lto ok clang-cl /O2 -flto -ffp-contract=off
rust/o3 ok rustc -C opt-level=3
rust/o3-lto ok rustc -C opt-level=3 -C lto=fat -C codegen-units=1
csharp/jit ok .NET 9, default tiered JIT
go/default ok go build, default flags
go/nobounds ok go build -gcflags=all=-B, bounds checks disabled
java/default ok HotSpot, default tiered compilation
node/default ok V8, default
python/cpython ok CPython 3.13.3
lua/lua55 ok lua55, interpreted
lua/luajit ok LuaJIT 2.1