Andrei Alexandrescu pisze:
Steven Schveighoffer wrote:
"Andrei Alexandrescu" wrote
Steven Schveighoffer wrote:
While we're on the subject of ditching, can we get rid of
foreach_reverse? How hard is it for a range to just have a reverse
property:
foreach(element; myrange.reverse)
Which simply reverses the order of traversal? That also would moot
the toe/last/tail/etc. debate ;)
I wish that debate went away. But eliminating toe and retreat would
require requiring .reverse as a primitive for *all* ranges, which is
wasteful and repetitive. Instead, a better design is to have ranges
(those that can) offer toe and retreat primitives such that a generic
function retro offers backward iteration for any range. In addition,
certain algorithms (such as the one that reverses a range in place)
need to manipulate the same range from two ends. Implementing them
using .reverse and a second range would be more difficult.
I didn't say you couldn't provide toe and retreat in Phobos' ranges
(for the reverse-a-range function). Most likely such an algorithm is
not using foreach and foreach_reverse, but using the functions directly.
My point was, foreach_reverse is an eyesore and a hack, and there
really is no need for it. And what a perfect time to get rid of it,
since we are already changing how foreach works ;)
I realize that this wouldn't really kill the toe debate for Phobos,
but at least it would be a library decision, and not part of the
compiler.
Yah, that makes sense. I vote for foreach_reverse to go away, too.
Andrei
vote++
BR
Marcin Kuszczak
(aarti_pl)