toString refactor in druntime

Jonathan Marler via Digitalmars-d digitalmars-d at puremagic.com
Sat Nov 1 06:02:25 PDT 2014


On Saturday, 1 November 2014 at 12:31:15 UTC, Dicebot wrote:
> On Saturday, 1 November 2014 at 07:02:03 UTC, Walter Bright 
> wrote:
>> On 10/30/2014 8:30 AM, Steven Schveighoffer wrote:
>>> This is a typical mechanism that Tango used -- pass in a ref 
>>> to a dynamic array
>>> referencing a stack buffer. If it needed to grow, just update 
>>> the length, and it
>>> moves to the heap. In most cases, the stack buffer is enough. 
>>> But the idea is to
>>> try and minimize the GC allocations, which are performance 
>>> killers on the
>>> current platforms.
>>
>> We keep solving the same problem over and over. 
>> std.internal.scopebuffer does this handily. It's what it was 
>> designed for - it works, it's fast, and it virtually 
>> eliminates the need for heap allocations. Best of all, it's an 
>> Output Range, meaning it fits in with the range design of 
>> Phobos.
>
> It is not the same thing as ref/out buffer argument. We have 
> been running ping-pong comments about it for a several times 
> now. All std.internal.scopebuffer does is reducing heap 
> allocation count at cost of stack consumption (and switching to 
> raw malloc for heap) - it does not change big-O estimate of 
> heap allocations unless it is used as a buffer argument - at 
> which point it is no better than plain array.

Sorry if this is a stupid question but what's being discussed 
here? Are we talking about passing a scope buffer to toString, or 
are we talking about the implementation of the toString function 
allocating it's own scope buffer?  API change or implementation 
notes or something else?  Thanks.


More information about the Digitalmars-d mailing list