DMD producing huge binaries
Steven Schveighoffer via Digitalmars-d
digitalmars-d at puremagic.com
Thu May 19 07:43:15 PDT 2016
On 5/19/16 9:45 AM, Andrei Alexandrescu wrote:
> On 05/19/2016 08:38 AM, Steven Schveighoffer wrote:
>> Yep. chain uses voldemort type, map does not.
>
> We definitely need to fix Voldemort types. Walter and I bounced a few
> ideas during DConf.
>
> 1. Do the cleartext/compress/hash troika everywhere (currently we do it
> on Windows). That should help in several places.
>
> 2. For Voldemort types, simply generate a GUID-style random string of
> e.g. 64 bytes. Currently the name of the type is composed out of its
> full scope, with some exponentially-increasing repetition of substrings.
> That would compress well, but it's just a lot of work to produce and
> then compress the name. A random string is cheap to produce and adequate
> for Voldemort types (you don't care for their name anyway...
> Voldemort... get it?).
>
> I very much advocate slapping a 64-long random string for all Voldermort
> returns and calling it a day. I bet Liran's code will get a lot quicker
> to build and smaller to boot.
This may be crazy, but I solved this problem by simply moving the struct
outside the function. What about a lowering that does this for you?
Example:
auto foo(T)(T t) if (someConstraints)
{
static struct Result
{
T t;
}
return Result(t);
}
Changes to:
private struct foo_Result(T) if (someConstraints)
{
T t;
}
auto foo(T)(T t) if (someConstraints)
{
alias Result = foo_Result!T // inserted by compiler
return Result(t);
}
Or even better:
template(T) foo if (someConstraints)
{
struct Result
{
T t;
}
auto foo(T t)
{
return Result(t);
}
}
What this does is lower the number of times the template parameters (and
function arguments) appears in the type name to 1. This gets rid of the
exponential nature of the symbol name.
This doesn't work for voldemorts with closures, but maybe it can somehow
be reconstructed so the context is included in the generated struct.
-Steve
More information about the Digitalmars-d
mailing list