MultiLang Benchmarks

Compare performance of multiple popular prorgamming languages across different tasks.

The original and actively developed project is hosted on Codeberg.
Additionally this project is also mirrored on GitHub.

Benchmarks

Run ./run to measure every benchmark in every available language. Use -b or --bench to select benchmarks, and -l or --lang to select languages. A selected language that a benchmark does not offer is skipped.

Use ./util/update-benchmarks.sh after measuring results to refresh each benchmark table and its SVG charts. It only accepts benchmark selection and always runs every language available for each selected benchmark.

Tested Languages

Compiled languages

VM languages

TypeScript/JavaScript Engines

Interpreted VM languages

Script languages

Objective-C and C++ are only benchmarked when they can use their standard libraries at a meaningfully higher level than plain C. Both can of course also fall back to the same C implementation style when that is better for performance, so these benchmarks are not mainly about absolute performance. They are included to show how higher-level objects and abstractions can slow things down compared to a C-style baseline or maybe even speed them up due to better optimized implementation.

C UTF-16 and Rust UTF-16 are only tested for benchmarks that deal with strings that might be Unicode and where this probably has an impact on performance or memory usage.

TypeScript is only benchmarked because ScriptC can only compile TS; Bun can also compile and directly run TS yet there is no measurable difference to Bun compiling and running the JS implementation (JS is a strict subset of TS).

Kotlin is not benchmarked separately because the same results as for Java are expected.

Chart Style

Benchmark result charts should use one shared visual style across all benchmark folders so regenerated assets stay comparable over time.

My other projects

See my other projects.