Use case: eliminate hidden allocations in buildPath

Brad Anderson eco at gnuk.net
Thu Dec 5 12:47:31 PST 2013


On Thursday, 5 December 2013 at 08:09:55 UTC, monarch_dodra wrote:
> On Wednesday, 4 December 2013 at 23:14:48 UTC, Andrei 
> Alexandrescu wrote:
>> Hello,
>>
>>
>> Walter and I were talking about eliminating the surreptitious 
>> allocations in buildPath:
>>
>> http://dlang.org/phobos/std_path.html#.buildPath
>>
>> We'd need to keep the existing version working, so we're 
>> looking at adding one or more new overloads. We're looking at 
>> giving the user the option to control any needed memory 
>> allocation (or even arrange things such that there's no memory 
>> allocated at all).
>>
>> It's a generous design space, so although we have a couple of 
>> ideas let's hear others first.
>>
>>
>> Thanks,
>>
>> Andrei
>
> Use an output range. It's the generic D approach, and what we 
> already do for the string functions such as 
> std.string.translate:
> http://dlang.org/phobos/std_string.html#.translate
> (look down for the output range overloads).
>
> Anything "allocator" related should be carried by the output 
> range itself. The function itself should not care nor know 
> about any of that.

And thanks to your improvements[1] to put() output ranges should 
actually be much more usable than they ever were before. I've 
mentioned this a few times but I tried to add an output range 
overload of toUpper and toLower but immediately encountered 
problems with appending dchars to char arrays.  Your recently 
merged improvements to put() appear to have addressed that 
problem and many others and I'll soon have another go at adding 
these overloads now that that change is in place so thanks for 
doing the hard work.

Before this got merged I don't even think output ranges could be 
easily used for this improvement to buildPath so it got merged at 
a very convenient time.

(my memory is a bit poor but if I'm remembering correctly 
appender worked because it had done its own handling of narrow 
strings but you couldn't just use a static or dynamic narrow 
string array as an output range)

1. https://github.com/D-Programming-Language/phobos/pull/1569


More information about the Digitalmars-d mailing list