Transience of .front in input vs. forward ranges
deadalnix
deadalnix at gmail.com
Mon Nov 5 06:48:41 PST 2012
Le 05/11/2012 04:11, Jonathan M Davis a écrit :
> On Sunday, November 04, 2012 15:40:18 deadalnix wrote:
>> Le 04/11/2012 03:26, Jonathan M Davis a écrit :
>>> 3. Make it so that ranges which can be transient are non-transient by
>>> default but provide a function to get at a transient version for speed
>>> (which was the fastRange proposal in this thread). The main problem here
>>> is that when the fast range gets wrapped, it's transient, and so anything
>>> using the wrapped range will be forced to use the transient version
>>> rather than using the non- transient version and only using the transient
>>> version when it's asked for. So, I don't think that this is particularly
>>> viable.
>>
>> Can you elaborate on that. I definitively don't see a problem that big here.
>
> The problem is that you can't opt out of the fast range once you've got it. If
> you use fastRange and then the result ends up getting wrapped by another
> range, that range's front is transient and has no way of indicating it. So,
> you're right back in the boat that we're in right now. In order to avoid that,
> virtually all range-based functions would have to not use fastRange, because
> they have no idea whether you're going to use their result to pass to another
> function or not.
>
> - Jonathan M Davis
HS Teoh explained it nicely.
The responsibility of using .transient or not belong to the consumer.
Only the consumer can know if a transient range is suitable.
So you don't wrap a transient range. You wrap a non transient range,
and, if the consumer is able to handle the transcient version, it call
.transient on its source, that call it on its source, etc . . . up to
the real source.
If one transformer is unable to handle transient range, the it don't
pass .transient to its source.
More information about the Digitalmars-d
mailing list