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.