range.save
Joseph Rushton Wakeling via Digitalmars-d
digitalmars-d at puremagic.com
Fri Nov 27 03:45:37 PST 2015
On Friday, 27 November 2015 at 11:31:14 UTC, Jonathan M Davis
wrote:
> Another piece of this puzzle to consider is that unless a range
> is a value type (or at least acts like a value type as long as
> you don't mutate its elements) or has save called on it, then
> it fundamentally doesn't work with lazy ranges. So, at minimum,
> we need to consider making it so that lazy ranges require
> forward ranges (and then, assuming that we continue to have
> save, the lazy ranges need to always call save on the range
> that they're given).
Ah, interesting you should bring that up, as it's exactly the
challenge of doing random number generation via a range interface
;-)
I'm looking at this problem from a slightly different angle,
which is that for a non-deterministic range (which is a subset of
possible InputRanges) to be lazy, it matters that the value of
.front is not evaluated until the first call to .front; and this
"not yet determined" property needs to be restored after
.popFront() is called.
Basically, you require _true_ laziness rather than the kind of
pseudo-laziness that most Phobos ranges display, where the
initial value of .front is determined in the constructor, and
.popFront() determines the next value of .front "eagerly".
(N.B. "Non-deterministic" here includes pseudo-non-deterministic
ranges, such as pseudo-RNGs.)
More information about the Digitalmars-d
mailing list