On Tuesday, 3 July 2012 at 16:37:20 UTC, Jonathan M Davis wrote:
...
Oh, and if we go with this, ideally, the compiler would be
updated to use
takeFront for foreach instead of front and popFront if a range
implements it
(but still do it the current way if it doesn't). So, if
typeof(range)
implements takeFront,
foreach(e; range) {...}
would then become
for(auto _range = range; !_range.empty;)
{
auto e = _range.takeFront();
...
}
instead of
for(auto _range = range; !_range.empty; _range.popFront())
{
auto e = _range.front();
...
}
but that's an optimization which could be added later.
- Jonathan M Davis
Great job! I think takeFront, is a really good idea. It would
also finally fix the whole "should pop return a value" debate.
I'd only be afraid the name might clash (in spirit) with the
existing "take", "takeOne" and "takeNone". Not so long ago, I
asked for a way to get the last elements of a subrange, and
proposed a method called "takeBack"...
Maybe "popMoveFront" would be more addequate/Accurate? This would
make it more in line with the existing "moveFront" defined inside
range, As well as the "popFront" which would be inside the range
implementation: It would make the trio "front, popFront,
popMoveFront".
I think wiring it into foreach is also a good idea, but would
require compiler support of course. Personally though, regarding
foreach, I'd appreciate it more if we could first get foreach
with ref to work with "front assign" (
http://forum.dlang.org/thread/ceftaiklanejfhodb...@forum.dlang.org
) That said, your proposal is probably less costly to implement.