Algorithms & opApply
Fawzi Mohamed
fawzi at gmx.ch
Mon Aug 23 22:59:51 PDT 2010
On 24-ago-10, at 04:26, dsimcha wrote:
> [...]
> 3. Ranges are the flagship way of iterating through an object in D,
> as they
> should be. opApply has its uses, but they're relatively few and far
> between. I'm
> wondering if anyone besides bearophile and I think supporting
> opApply is worth the
> effort and potential bloat, if Walter cares enough to fix Bug 2443,
> and if Andrei
> considers it to be a reasonable part of std.range/std.algorithm's
> design.
I already defended opApply in the past let me put this here again:
ranges abstract away one iteration step. This is useful because it
means that combining several of them, adancing in locksteo,... is
possible and easy to do
opApply abstracts away a whole loop. This makes complex loops simpler
to realize without having to resort to fibers, and it allows
*parallel* looping in a natural way (which cannot be done directly
using only single iteration operations.
In blip/dchem I use this quite a bit (for example for parallel loop
helpers, often my objects have obj.sLopp
obj.pLoop(blocksize=dafaultVal)).
I like very much to be able to do foreach (x;obj.pLoop){...}
Now they obviously are different kinds of abstractions, so looping in
lockstep is not possible with opApply, at most you can lockstep *one*
opApply with N iterators.
About the operations in algorithm well I am not too sure how much
support there should be, if they require just looping then yes, but
(for example) I think that almost all of them would fail if feeded
with a parallel opApply.
For sequential loops fibers can transform opApply in an iterator (just
as fibers can be used to easily make an iterator out of a complex loop).
But fiber have a relatively high cost.
So I suppose I would give support just to the basic stuff + conversion
for sequential loops (via fibers), keeping most of std.algorithm
opApply free
Fawzi
More information about the Digitalmars-d
mailing list