On 03/23/2010 06:58 AM, clueless bystander wrote:
Lars T. Kyllingstad Wrote:
clueless bystander wrote:
Watching D evolve from the outside there seems to be a lot of ongoing discussion
on this newsgroup about the D range idiom which is somehow opposed to
conventional
thinking about iterators.
Can someone please explain in plain words just exactly what a range is and how
it differs from the iterator concept (if that's appropriate???) and what are
the benefits
from a data modeling and access perspective.
Sure, I'm clueless, though suspect many other bystanders would appreciate a
succinct heads-up.
Thanks,
clueless bystander
I'm probably not the right person to answer your question, since I have
virtually no experience with C++ iterators. Instead I'll just refer you
to Andrei's own article on the subject:
http://www.informit.com/articles/article.aspx?p=1407357
Please don't hesitate to ask again if it didn't clear things up for you. :)
-Lars
Yes, well, thanks again. The first 7 pages seemed to have plausible arguments
but the going get tough thereafter. Maybe the reason ranges are not popular
is that they are hard to explain even though they might be simple and obvious
in hindsight.
Sigh,
c.b.
Thank you for your interest. The article
(http://erdani.com/publications/on-iteration.html) is long because
following my keynote talk at BoostCon 2009, I've received a flurry of
emails asking me to flesh out the ranges design in greater detail and to
better motivate them. That article not only describes the design, but it
also explains the historical artifacts that led to today's imperfect
state of affairs, motivates defining ranges with categories, and gives
examples.
The price for such thoroughness is - sorry - size.
If you are familiar with STL iterators and GoF-style iterators (with
hasmore/get/advance), ranges are so simple, they define themselves: a
range is a GoF-style iterator that recognizes the necessity of STL's
iterator categories (input, forward, bidirectional, and random). All the
rest is aftermath.
Andrei