GCs in the news

Dicebot via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 17 11:32:58 PDT 2014


On Thursday, 17 July 2014 at 18:22:11 UTC, H. S. Teoh via 
Digitalmars-d wrote:
> Actually, I've realized that output ranges are really only 
> useful when
> you want to store the final result. For data in mid-processing, 
> you
> really want to be exporting an input (or higher) range interface
> instead, because functions that take output ranges are not 
> composable.
> And for storing final results, you just use std.algorithm.copy, 
> so
> there's really no need for many functions to take an output 
> range at
> all.

Plain algorithm ranges rarely need to allocate at all so those 
are somewhat irrelevant to the topic. What I am speaking about 
are variety of utility functions like this:

S detab(S)(S s, size_t tabSize = 8)
     if (isSomeString!S)

this allocates result string. Proper alternative:

S detab(S)(ref S output, size_t tabSize = 8)
     if (isSomeString!S);

plus

void detab(S, OR)(OR output, size_t tab_Size = 8)
     if (   isSomeString!S
         && isSomeString!(ElementType!OR)
        )


More information about the Digitalmars-d mailing list