Appender is ... slow

Jonathan M Davis via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Aug 14 15:55:12 PDT 2014


On Thursday, 14 August 2014 at 21:34:04 UTC, Jonathan M Davis 
wrote:
> On Thursday, 14 August 2014 at 21:11:51 UTC, safety0ff wrote:
>> IIRC it manages the capacity information manually instead of 
>> calling the runtime which reduces appending overhead.
>
> That would make some sense, though it must be completely 
> avoiding ~= then and probably is even GC-mallocing the array 
> itself. Regardless, I clearly need to study the code if I want 
> to know what it's actually doing.

It looks like what it does is essentially to set the array's 
length to the capacity that the GC gave it and then manage the 
capacity itself (so, basically what you were suggesting) and 
essentially avoids the runtime overhead of ~= by reimplementing 
~=. Whether it does it in a more efficient manner is an open 
question, and it also begs the question why it would be cheaper 
to do it this way rather than in the GC. That's not at all 
obvious to me at the moment, especially because the code for 
ensureAddable and put in Appender are both fairly complicated.

So, I really have no idea how Appender fairs in comparison to 
just using ~=, and I have to wonder why something similar can't 
be done in the runtime itself if Appender actually is faster. I'd 
have to spend a lot more time looking into that to figure it out.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list