On Tuesday, 16 August 2022 at 08:25:18 UTC, Diego wrote:
It seams huge in my opinion for an empty program
What are the best practices to reduce the size?
The problem is that the druntime, the run time library needed to
support many D features, is large and linked in its entirety by
default. The linker could strip unused functions, but even in an
empty program, a lot is done before `main` that pulls in most of
it:
- initializing floating point settings, signal handlers, stdout
and stderr
- parsing --DRT command line options for configuring the Garbage
Collector
- running module constructors / unit tests
There is a goal to make druntime more 'pay as you go' so these
things only happen when they're needed, but progress is slow. In
the mean time, if you can live without a lot of D features that
require the runtime, you can use `-betterC`:
https://dlang.org/spec/betterc.html
With the LDC2 compiler, you can use `--link-defaultlib-shared`,
so your program dynamically links with the run time library. This
doesn't help for a single D program, but multiple D programs can
reuse a single shared library.
Finally, you could look at customized versions of the runtime,
such as Light Weight D Runtime: https://github.com/hmmdyl/LWDR