Compiler benchmarker for D, C, C++, Go, Rust with more to come

Per Nordlöw per.nordlow at gmail.com
Sat Mar 16 21:23:18 UTC 2019


After reading

https://forum.dlang.org/thread/nlhybmioaoxkydicmtjj@forum.dlang.org

it's about time I announce my little Python snippet that 
exercises the compilation speed of D and other languages with a 
superficial test program generator at

https://github.com/nordlow/compiler-benchmark

Run as

    ./benchmark.py

This generates a single source file for each supported language, 
currently D, C, C++, Go and Rust, containing 50k number of 
trivial functions that from the main function are called and 
reduced to a single integer which is returned at the end of main. 
The benchmark then measures the time it takes for each compiler 
to run semantic analysis on the source file (excluding output of 
any object files).

My only question is:
How is it possible for Rust be to 50x slower than D in this 
test!!!??? Am I calling rustc in the wrong way? Especially taking 
into account the amount of time (and money) that has been put 
into making Rust fast(er). Through fancy caching of IR-files and 
more.

I very much welcome PRs that add more languages.

Output on Ubuntu 18.04 system is

Code-generation:
Generating generated/c/foo.c took 0.073 seconds (C)
Generating generated/c++/foo.c++ took 0.073 seconds (C++)
Generating generated/d/foo.d took 0.076 seconds (D)
Generating generated/rust/foo.rs took 0.076 seconds (Rust)
Generating generated/zig/foo.zig took 0.077 seconds (Zig)
Generating generated/go/foo.go took 0.074 seconds (Go)

Clang:
- Checking of generated/c/foo.c took 1.373 seconds (using 
"/usr/bin/clang-7")
- Checking of generated/c++/foo.c++ took 1.345 seconds (using 
"/usr/bin/clang++-7")

GCC:
- Checking of generated/c/foo.c took 0.385 seconds (using 
"/usr/bin/gcc-5")
- Checking of generated/c++/foo.c++ took 0.675 seconds (using 
"/usr/bin/g++-5")
- Checking of generated/c/foo.c took 0.551 seconds (using 
"/usr/bin/gcc-6")
- Checking of generated/c/foo.c took 0.518 seconds (using 
"/usr/bin/gcc-7")
- Checking of generated/c++/foo.c++ took 1.294 seconds (using 
"/usr/bin/g++-7")
- Checking of generated/c/foo.c took 0.527 seconds (using 
"/usr/bin/gcc-8")
- Checking of generated/c++/foo.c++ took 1.363 seconds (using 
"/usr/bin/g++-8")

D:
- Checking of generated/d/foo.d took 0.403 seconds (using 
"/usr/bin/dmd")
- Checking of generated/d/foo.d took 0.352 seconds (using 
"/home/per/.local/ldc2-1.15.0-beta1-linux-x86_64/bin/ldmd2")

Go:
- Checking of generated/go/foo.go took 1.716 seconds (using 
"/usr/bin/gccgo")

Rust:
- Checking of generated/rust/foo.rs took 17.828 seconds (using 
"/home/per/.cargo/bin/rustc")

Zig:
Speedups:
- D to gcc-8: 1.50
- D to g++-8: 3.88
- D to Clang: 3.90
- D to Clang++: 3.83
- D to Go: 4.88
- D to Rust: 50.71


More information about the Digitalmars-d-announce mailing list