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