Transient ranges

Dicebot via Digitalmars-d digitalmars-d at puremagic.com
Fri Jun 3 01:37:03 PDT 2016


On Wednesday, 1 June 2016 at 01:31:53 UTC, Steven Schveighoffer 
wrote:
> If you want to use such "ranges", the compiler will not stop 
> you. Just don't expect any help from Phobos.

It only strengthens my opinion that Phobos is not a standard 
library I want. Really, many of those issue would have been 
solved if basic input range was defined as `empty` + `ElementType 
popFront()` instead. Some more - if algorithms didn't try to 
preserve original range kind unless they can do it with no 
overhead (i.e. arrray.map should not be a random access range out 
of the box).

>> This is a totally valid code I want to actually work and not be
>> discarded as "bug".
>
> Then it's not a bug? It's going to work just fine how you 
> specified it. I just don't consider it a valid "range" for 
> general purposes.
>
> You can do this if you want caching:
>
> only(0).map!(x => uniform(0, 10)).cache

Good advice. Don't want bugs with non-stable results and 
accidental double I/O in your long idiomatic range pipeline? Just 
put "cache" calls everywhere just to be safe, defensive 
programming for the win!

Existing situation is bug prone exactly because you have no idea 
if you need to cache or not unless you try out specific 
combination of algorithms / predicates / input and carefully 
check what it does.


More information about the Digitalmars-d mailing list