DMD producing huge binaries

Georgi D via Digitalmars-d digitalmars-d at puremagic.com
Thu May 19 08:56:04 PDT 2016


On Thursday, 19 May 2016 at 12:38:09 UTC, Steven Schveighoffer 
wrote:
> On 5/17/16 6:04 PM, ZombineDev wrote:
>> On Tuesday, 17 May 2016 at 21:58:06 UTC, Andrei Alexandrescu 
>> wrote:
>>> On 05/17/2016 05:44 PM, Georgi D wrote:
>>>> Hi,
>>>>
>>>> While working on a D project which heavily uses the lazy 
>>>> algorithms for
>>>> ranges I noticed a sudden huge increase in the compilation 
>>>> time and the
>>>> produced binary size.
>>> [snip]
>>>
>>> Thanks. That's definitely deserving of a bug report. -- Andrei
>>
>> I'm guessing that is highly related to this one:
>> https://issues.dlang.org/show_bug.cgi?id=15831
>
> Yep. chain uses voldemort type, map does not.
>
> Georgi: try copying chain implementation into your local file, 
> but instead of having a static internal struct, move it to a 
> module-level struct (you probably have to repeat the template 
> parameters, but not the constraints). See if it produces a 
> similar slimming effect.
>
> -Steve

Yes,

Making a local copy of chain and moving the structure outside of 
the method solved the problem and reduced the code size.

The stripped size even reduced from the version that did not 
experience the huge increase. Stripped: 7.4Mb -> 5.5MB

Should we actually change the implementation in phobos to be like 
this?

In the company I work in we are very sensitive to the code size 
so anything that can be made for this in phobos will help with 
adoption.

I am still curious though why the code size increased so 
dramatically with such a small change. Both versions return a 
result from chain and actually the one that does not experience 
the increase is more complex (includes the one that does).

In my actual code I have multiple calls to chain on top of the 
result of this and the code size does not increase dramatically.

I am also concerned by the fact that ldc on mac just could not 
compile the source which produced the big binary (entering an 
infinite loop).

Thanks



More information about the Digitalmars-d mailing list