On Monday, 6 January 2014 at 16:25:08 UTC, David Nadlinger wrote:
On Monday, 6 January 2014 at 12:22:37 UTC, Mike wrote:
If any compiler implementers are reading this, please try to
generate only code that is used by the program being compiled.
I need to get this sorted out and submit some bug/enhancement
requests to the compiler writers, but I first need to
understand things better so I can articulate it well.
The issue with ModuleInfo is that you can actually query the
list of all loaded D modules at runtime (ModuleInfo.opApply(),
mainly for things like running static constructors, unit tests,
Object.factory, …). So, even if your module is not using static
constructors or unit tests, you can't just not emit the
ModuleInfo in general.
I think it's OK to emit code that is not used, as long as the
linker can safely strip it out if it can't find a path to it.
I'm still a novice with the GNU toolchain, but I believe ld does
this this with --gc-sections in collusion with GCC's
-ffunction-sections and -fdata-sections.
A recent experiment with GDC showed that if unused symbols are
stripped out by the linker, some of the used symbols get
dislocated (at least that's what I think is happening).
Discussion here
(http://forum.dlang.org/post/[email protected]).
My experiments with LDC last month seemed require a huge amount
snowballing implementations just to compile, when they were all
just going to get stripped out by the linker with --gc-sections
anyway.
Again, I would like to submit enhancement/bug reports for these
things, but I need to learn more about what's actually going on,
and what's actually needed by D, so I my report is meaningful and
actionable.
In theory, LDC allows you to selectively disable ModuleInfo
generation for some modules
(http://wiki.dlang.org/LDC-specific_language_changes), but it
looks like the pragmas actually don't have any effect in
current LDC2 builds
(https://github.com/ldc-developers/ldc/issues/571).
David
I actually wasn't aware of these features. These will be quite
helpful when implemented. Thank you.