Yet another strike against the current AA implementation

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Apr 26 18:20:32 PDT 2009


Michel Fortin wrote:
> On 2009-04-26 11:46:51 -0400, dsimcha <dsimcha at yahoo.com> said:
> 
>> == Quote from Michel Fortin (michel.fortin at 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



More information about the Digitalmars-d mailing list