On Mon, 30 Apr 2012 15:50:00 -0400, Walter Bright
<[email protected]> wrote:
I'm surprised nobody has mentioned opApply. That was a good idea at the
time, but Ranges are a superior solution. I'd like to see new code not
use opApply. It's a dead end, though it'll still be supported for a long
time.
I think we've already covered this -- opApply does things that ranges
could never do. I think they can both live in harmony. It's not even
close to a dead end. I look at opApply as foreach on a range with a
stack-allocated context specifically for iteration. Then of course, you
can do stack-based traversal, which is not really possible for ranges.
A trivial example:
foreach(dchar d; "longstring") {}
treating "longstring" as a range, you cannot possibly get the performance
opApply has (although, you have to be able to inline both the opApply call
and the delegate calls, currently not supported for the above code), as it
has to decode each dchar *twice*, once for getting d, and once for popping
it off the front.
-Steve