On Sunday, 3 September 2017 at 12:46:05 UTC, Moritz Maxeiner
wrote:
I agree, though I was talking about what the abstract data type
of a "series" is, i.e. what operations is exposes. From my
observation:
A D input range exposes via empty/front/popFront.
A classic iterator exposes via begin/end.
A Rebol series seems to be a safer form of iterator, as it
doesn't expose begin/end directly, but exposes restricted
operations that are defined as manipulating begin/end.
They are all pretty low-level abstractions. C++ has posited that
iterators should be the bridge connecting generic data structures
and generic algorithms. But they are pretty awful at that. They
make it incredibly easy to destroy one of your structure's
invariants, or to use it in a way that ignores some of its
invariants (leading to inferior performance and sometimes
unnecessarily bulky code). Ironically iterators are frequently
used in OO code even though they clearly violate the "Tell, don't
ask" principle, as do D ranges (and presumably also Rebol series,
though I only skimmed over the documentation).