DMD producing huge binaries
ZombineDev via Digitalmars-d
digitalmars-d at puremagic.com
Fri May 20 05:08:37 PDT 2016
On Friday, 20 May 2016 at 12:01:14 UTC, ZombineDev wrote:
> On Friday, 20 May 2016 at 11:40:12 UTC, Rene Zwanenburg wrote:
>> On Friday, 20 May 2016 at 11:32:16 UTC, ZombineDev wrote:
>>> IMO, the best way forward is:
>>> + The compiler should lower voldemort types, according to the
>>> scheme that Steve suggested
>>> (http://forum.dlang.org/post/nhkmo7$ob5$1@digitalmars.com)
>>> + After that, during symbol generation (mangling) if a symbol
>>> starts getting larger than some threshold (e.g. 800
>>> characters), the mangling algorithm should detect that and
>>> bail out by generating some unique id instead. The only
>>> valuable information that the symbol must include is the
>>> module name and location (line and column number) of the
>>> template instantiation.
>>
>> Location info shouldn't be used. This will break things like
>> interface files and dynamic libraries.
>
> Well... template-heavy code doesn't play well header-files and
> dynamic libraries. Most of the time templates are used for the
> implementation of an interface, but template types such as
> ranges are unsuable in function signatures. That's why they're
> called voldemort types - because they're the ones that can
> not/must not be named.
> Instead dynamic libraries should use stable types such as
> interfaces, arrays and function pointers, which don't have the
> aforementioned symbol size problems.
>
> Since we're using random numbers for symbols (instead of the
> actual names) it would not be possible for such symbols to be
> part of an interface, because a different invocation of the
> compiler would produce different symbol names. Such symbols
> should always an implementation detail, and not part of an
> interface. That's why location info would play no role, except
> for debugging purposes.
@Rene
How do you expect the compiler to know the exact return type,
only by looking at this signature:
auto transmogrify(string str);
A possible implementation might be this:
auto transmogrify(string str)
{
return str.map!someFunc.filter!otherFunc.joiner();
}
or something completly different.
More information about the Digitalmars-d
mailing list