On Monday, 17 June 2013 at 22:18:44 UTC, Joseph Rushton Wakeling
wrote:
On 06/17/2013 09:36 PM, monarch_dodra wrote:
Good analysis but (sorry) I think you are on the wrong track.
One of the major problems in std.random is that the ranges use
value semantics.
This means they are *saved* whenever they are copied, as
opposed to just
referenced. This creates the problems you have mentioned, and
even more.
I agree that the fact that pseudo-random number generators use
value semantics
is a serious problem, and I was thinking of our previous
discussions in
preparing these remarks.
I didn't even realize you were part of that thread :/ Sorry about
that.
On the contrary, consider the SimpleRandomRange -- or
RandomSample -- with a
specified RNG that has reference semantics. You'll get a
different sequence
each time you iterate over it, and .save will not enable you to
reproduce the
sequence.
I don't think you should pass rndGen to adapter ranges if you
want any kind of deterministic behavior. You should really give
such ranges their own new generator, eg:
auto sample = randomSample(iota(100), 5,
Random(unpredictableSeed));
That said, it would help even more if we had something *even*
simpler, such as:
"Random random()" or "Random newRandomRange()", and then have the
more idiomatic:
auto sample = randomSample(iota(100), 5, newRandomRange());