Comment #0 by bearophile_hugs — 2011-09-02T02:30:49Z
This is a _potential_ enhancement request.
A wrong D2 program:
import std.stdio, std.random;
void foo(RND)(RND rnd) {
foreach (i; 0 .. 5)
write(uniform(0, 10, rnd), " ");
writeln();
}
void main() {
auto rnd = Xorshift(1);
foo(rnd);
foo(rnd);
}
DMD 2.054 output:
3 1 2 7 5
3 1 2 7 5
The mistake is a missing ref, that causes foo to not return an updated random generator, so it always generate the same random values:
void foo(RND)(ref RND rnd) {
To avoid this bug (that I think is common enough), I suggest to experiment if it's performance-wide possibile to turn all random generators into reference things, that is final class instances, that don't require that "ref".
Comment #1 by bearophile_hugs — 2011-12-05T04:09:43Z