C++ / Why Iterators Got It All Wrong
Mark via Digitalmars-d
digitalmars-d at puremagic.com
Mon Sep 4 10:34:00 PDT 2017
On Sunday, 3 September 2017 at 12:46:05 UTC, Moritz Maxeiner
> I agree, though I was talking about what the abstract data type
> of a "series" is, i.e. what operations is exposes. From my
> 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).
More information about the Digitalmars-d