GCs in the news

Dicebot via Digitalmars-d digitalmars-d at puremagic.com
Fri Jul 18 03:15:46 PDT 2014


On Friday, 18 July 2014 at 00:08:17 UTC, H. S. Teoh via 
Digitalmars-d wrote:
> On Thu, Jul 17, 2014 at 06:32:58PM +0000, Dicebot via 
> Digitalmars-d wrote:
>> 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)
>>        )
>
> I think you're missing the input parameter. :)
>
> 	void detab(S, OR)(S s, OR output, size_t tabSize = 8) { ... }
>
> I argue that you can just turn it into this:
>
> 	auto withoutTabs(S)(S s, size_t tabSize = 8)
> 	{
> 		static struct Result {
> 			... // implementation here
> 		}
> 		static assert(isInputRange!Result);
> 		return Result(s, tabSize);
> 	}
>
> 	auto myInput = "...";
> 	auto detabbedInput = myInput.withoutTabs.array;
>
> 	// Or:
> 	MyOutputRange sink;	// allocate using whatever scheme you want
> 	myInput.withoutTabs.copy(sink);
>
> The algorithm itself doesn't need to know where the result will 
> end up
> -- sink could be stdout, in which case no allocation is needed 
> at all.

Yes this looks better.


More information about the Digitalmars-d mailing list