Policy for exposing range structs
Johan Engelen via Digitalmars-d
digitalmars-d at puremagic.com
Wed Apr 20 01:56:18 PDT 2016
On Tuesday, 19 April 2016 at 17:59:48 UTC, Steven Schveighoffer
wrote:
> On 4/19/16 10:44 AM, Johan Engelen wrote:
>
>> The feature is experimental, and has been tested on Weka.io's
>> codebase.
>> Compilation with -hashthres=1000 results in a binary that is
>> half the
>> size of the original (201MB vs. 461MB). I did not observe a
>> significant
>> difference in total build times.
>
> I'd be surprised link times did not improve. With my trivial
> test cases, the linker started getting hung up with very long
> symbols. The compilation itself was quick though.
`nm` on my Mac cannot handle the long symbol names, and I have to
use llvm-nm :)
> Certainly, cutting exe sizes (this is significantly more than
> half, BTW) is a good thing in itself.
>
> Another thing, however, is memory usage of the compiler. My
> understanding is that having large symbol names requires more
> memory. How does that fare?
I don't know. Generating the (unhashed) mangled symbol names
seems fast. LDC is using so much memory (>6 GB) that I think a
few extra megabytes for symbol names is not noticeable (the
symbol name is cached for functions; adding caching for other
symbol mangled names did not change compile times but I didn't
look at memory). What worries me is that std.traits is doing all
that string processing for simple things like getting the storage
class of a function parameter. When it starts to do CTFE on a
string that is 1 MB, that's not good I think.
More information about the Digitalmars-d
mailing list