protocol for using InputRanges
Joseph Rushton Wakeling
joseph.wakeling at webdrake.net
Sun Mar 23 02:47:31 PDT 2014
On 23/03/14 08:53, Jonathan M Davis wrote:
> But again, front and empty should normally function as if they were variables.
> They should be property functions and should be pure (or at least act like
> they're pure). I'm sure that a _lot_ of code will break if that isn't
> followed.
There are some not-very-nice exceptions to that in std.random, where in many of
the range types you have stuff along the following lines:
auto front() @property
{
if (notInitialized)
{
init();
}
return _value;
}
see e.g. MersenneTwister, RandomSample, and others. It's all a nasty
consequence of that RNGs-as-value-types problem we've discussed previously.
However, the class-based std.random2 that is being discussed on the announce
list fixes that:
http://forum.dlang.org/thread/cyytvhixkqlbwkmiugex@forum.dlang.org
> In general though, I think that most of us would agree that front and empty
> should be treated as properties - i.e. as if they were variables - and that
> they should have try to stick to those semantics as closely as possible.
> Ranges that stray from that seriously risk not working with a lot of range-
> based code.
Yes, absolutely.
More information about the Digitalmars-d
mailing list