On Mon, 30 Apr 2012 15:50:00 -0400, Walter Bright <newshou...@digitalmars.com> 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

Reply via email to