Michel Fortin wrote:
On 2009-04-26 11:46:51 -0400, dsimcha <dsim...@yahoo.com> said:

== Quote from Michel Fortin (michel.for...@michelf.com)'s article
Hum, are you saying opApply superior when it comes to iterating in a
tree? It seems that with opApply you could use the stack by recursively
calling opApply with the given delegate on each one of the branches.

Exactly. On the other hand, you lose a lot of flexibility with opApply. If you tried to port most of std.range to operate on the opApply interface instead fo the
forward range interface, I doubt you'd get very far.

IMHO, though, opApply should *not* be deprecated. opApply and ranges attempt to solve similar problems, but not the same problem. Ranges attempt to solve the problem of iterating over some object with maximum flexibility from the point of
view of the user of the object.  opApply attempts to solve the problem of
iterating with maximum flexibility from the point of view of the implementer of the object. In some cases, like the one you just described, the latter can be
better.

Indeed. I certainly agree that both ranges and opApply have their place.

So what the implementer can do with opApply is write an optimized iteration algorithm for use with foreach. Which may mean that when both opApply and ranges are available for generating foreach's code, the compiler should favor opApply. Currently, I believe it's the reverse.

I think, all other things being equal, that opApply tends to be slower than iterators.

Andrei

Reply via email to