Is there any language that native-compiles faster than D?

James Lu jamtlu at
Wed Aug 26 01:13:47 UTC 2020

On Thursday, 20 August 2020 at 20:50:25 UTC, Per Nordlöw wrote:
> After having evaluated the compilation speed of D compared to 
> other languages at
> I wonder; is there any language that compiles to native code 
> anywhere nearly as fast or faster than D, except C?
> If so it most likely needs to use a backend other than LLVM.
> I believe Jai is supposed to do that but it hasn't been 
> released yet.

V8 JavaScript compiles faster:

$ d8 --always-opt --trace-opt --single-threaded 
--no-compilation-cache mandelbrot.js | ts -s "%.s"
0.000025 [compiling method 0x3fc50821068d <JSFunction (sfi = 
0x3fc508210165)> using TurboFan]
0.001651 [optimizing 0x3fc50821068d <JSFunction (sfi = 
0x3fc508210165)> - took 4.455, 41.945, 0.052 ms]
0.001707 [optimizing 0x3fc508085b65 <JSFunction Complex (sfi = 
0x3fc508210261)> because --always-opt]
0.001736 [compiling method 0x3fc508085b65 <JSFunction Complex 
(sfi = 0x3fc508210261)> using TurboFan]
0.001763 [optimizing 0x3fc508085b65 <JSFunction Complex (sfi = 
0x3fc508210261)> - took 0.125, 0.284, 0.019 ms]
0.001789 [optimizing 0x3fc508211665 <JSFunction 
iterate_mandelbrot (sfi = 0x3fc508210229)> because --always-opt]
0.001817 [compiling method 0x3fc508211665 <JSFunction 
iterate_mandelbrot (sfi = 0x3fc508210229)> using TurboFan]
0.001842 [optimizing 0x3fc508211665 <JSFunction 
iterate_mandelbrot (sfi = 0x3fc508210229)> - took 0.167, 1.197, 
0.022 ms]
0.001868 [optimizing 0x3fc508085b85 <JSFunction abs (sfi = 
0x3fc508210299)> because --always-opt]
0.001892 [compiling method 0x3fc508085b85 <JSFunction abs (sfi = 
0x3fc508210299)> using TurboFan]
0.001916 [optimizing 0x3fc508085b85 <JSFunction abs (sfi = 
0x3fc508210299)> - took 0.125, 0.421, 0.025 ms]
0.002093 [optimizing 0x3fc508085bbd <JSFunction mul (sfi = 
0x3fc508210309)> because --always-opt]
0.002337 [compiling method 0x3fc508085bbd <JSFunction mul (sfi = 
0x3fc508210309)> using TurboFan]
0.002365 [optimizing 0x3fc508085bbd <JSFunction mul (sfi = 
0x3fc508210309)> - took 0.134, 0.550, 0.023 ms]
0.002389 [optimizing 0x3fc508085ba1 <JSFunction add (sfi = 
0x3fc5082102d1)> because --always-opt]
0.002498 [compiling method 0x3fc508085ba1 <JSFunction add (sfi = 
0x3fc5082102d1)> using TurboFan]

--single-threaded disables compilation background tasks
--always-opt makes V8 immediately compile the function without 

Timestamps thanks to "ts" from moreutils.

$ time dmd -c mandelbrot.d

real	0m0.507s
user	0m0.416s
sys	0m0.094s

V8 compiles 202x faster.

-c to omit linking, which can be slow.

That's using the struct/double version. (I also ran it with 
timestamps on the verbose version, writing to disk accounted for 
a negligible amount of time.)

Obviously, take these results with a grain of salt, since 
--always-opt makes the compiled program very slow. But still, 
even with it off, V8 can compile very fast.


LDC2 takes 1.695 seconds to compile with no flags, and 2.126 
seconds with O2.
QuickJS takes around 0.36 seconds to compile, but the program 
output is unbearably slow.

However, I suspect by the time the fastest and most balanced D 
compiler finishes compiling the program and executing it, V8 will 
already have finished executing it.

More information about the Digitalmars-d mailing list