Ranges of char and wchar

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Thu May 8 14:38:18 PDT 2014


On 5/8/14, 1:41 PM, "Luís Marques" <luis at luismarques.eu>" wrote:
> On Thursday, 8 May 2014 at 18:21:32 UTC, H. S. Teoh via
> Digitalmars-d wrote:
>> I've thought about input ranges vs. output ranges for a bit.  I think it
>> doesn't make sense for functions that process data to take an output
>> range: output ranges are data sinks, and should only be used for the
>> endpoint of a data processing pipeline. Since the string function
>> doesn't know whether or not it's the last in a pipeline (only the
>> calling code can know this), it should return an input range. If the
>> user code wants to put the result into an output range, then it should
>> simply use std.algorithm.copy.
>
> I agree with H. S. Teoh. Indeed, I was thinking of trying to
> create an alternative version of std.format which returned an
> InputRange, instead of taking an OutputRange. The benefit of this
> becomes obvious when you want to use std.format() in your own
> ranges, which currently impairs laziness, pipelining, avoiding
> memory allocations, etc.

Interesting. So then the range returned by format() will save everything 
passed to it, which means...

int fun(int[] a)
{
    auto before = format("Before: %s", a);
    foreach (ref e; a) ++e;
    auto after = format("After: %s", a);
    writeln(before, "\n--->\n", after);
}

*ouch*

Andrei



More information about the Digitalmars-d mailing list