digitalmars.D - Range proposal

• Bill Baxter (36/36) Sep 09 2008 The current range proposal may be putting too much emphasis on the
• Bruce Adams (12/13) Sep 10 2008 What current range proposal? I'm interested in what you're saying but a ...
• Bill Baxter (10/21) Sep 10 2008 Oh, seems it's actually taking place on digitalmars.d.announce.
• Manfred_Nowak (20/21) Sep 10 2008 The problem with both models is, that there are canonical operators one
• Bill Baxter (8/23) Sep 10 2008 Well not necessarily synonyms, because how that iterator is turned
"Bill Baxter" <wbaxter gmail.com> writes:
```The current range proposal may be putting too much emphasis on the
range being a contiguous linear entity.  As something which represents
a begin and and end and *everything in between*.  That is only true in
certain special cases.  Even with linked lists, you don't really have
that.  You just have two pointers that could be pointing to anywhere
in memory.  The range doesn't really represent everything in between
those pointers.  Other examples that contradict thinking of a range as
simply "here to there and everything in between" are infinite
generators, or random iterators (like the HMM example).

It may lead to a cleaner nomenclature if we acknowledge this fact, and
think of a range more as an iterator plus a sentinel, rather than
trying to emphasize the symmetry between the beginning and end items
that really only exists for special cases.

In this terminology the "left" thing points at the "value" and the
"right" thing is the "end".

Here's one way that could pan out:

** Basics

** Input range/ Forward range
e = r.value      -- instead of r.left
r.next             -- still ok

** Bidirectional range
r.pop            -- ok as-is
--> or just s.moveTo(r)

** Random access
ok as-is

So re-iterating, the basic idea is to think of a range as an iterator
with a current value, that happens to have an extra thing hanging
around, it's "end", a sentinel that marks a stopping condition.

Thoughts?
--bb
```
Sep 09 2008
```On Wed, 10 Sep 2008 04:42:25 +0100, Bill Baxter <wbaxter gmail.com> wrote:

The current range proposal...

What current range proposal? I'm interested in what you're saying but a
little
context would be nice. The same with your post on bi-directional iterators.

http://ssli.ee.washington.edu/~aalexand/d/tmp/std_range.html

The only thing that indicates that this is a proposal and not a full
integrated
and implemented library is the tmp in the URL. So what discussion have I
missed?

Regards,

Bruce.
```
Sep 10 2008
"Bill Baxter" <wbaxter gmail.com> writes:
```On Wed, Sep 10, 2008 at 4:13 PM, Bruce Adams <tortoise_74 yeah.who.co.uk> wrote:
On Wed, 10 Sep 2008 04:42:25 +0100, Bill Baxter <wbaxter gmail.com> wrote:

The current range proposal...

Oh, seems it's actually taking place on digitalmars.d.announce.
You really can't omit d.announce if you're interested in discussions
about D's future.  For better or worse, mondo threads pop up there all
too often on the heels of big announcements.

What current range proposal? I'm interested in what you're saying but a
little
context would be nice. The same with your post on bi-directional iterators.

http://ssli.ee.washington.edu/~aalexand/d/tmp/std_range.html

That's the one.

The only thing that indicates that this is a proposal and not a full
integrated
and implemented library is the tmp in the URL. So what discussion have I
missed?

digitalmars.d.announce.

I suppose he wrote the proposal as if it were a done deal to avoid
having to rewrite it when it is a done deal.

--bb
```
Sep 10 2008
"Manfred_Nowak" <svv1999 hotmail.com> writes:
```Bill Baxter wrote:

think of a range more as an iterator plus a sentinel

The problem with both models is, that there are canonical operators one
both models, which are somehow frantically hidden. This is shown

1) by the deliberately constructed compound of `[left,right]
[Diff,Union]'
2) the missing definition of a "subrange"

Both seem undefinable without having some notion of "concatenation"---
and if one has concatenation, a request for the reverse operation
"splitting" is unavoidable.

In fact the semantics of `r.moveTo(s)' seems not to be fully defined in
both approaches.

In fact in your approach of thinking of `r.moveto(s)', the "iterator"
of `s' turns into a "sentinel" for `r', thereby making sentinels and
iterators to synonyms.

If there is indeed a structural similarity to Andrei's approach, the
same problem must show up somewhere.

-manfred

--
If life is going to exist in this Universe, then the one thing it
cannot afford to have is a sense of proportion. (Douglas Adams)
```
Sep 10 2008
"Bill Baxter" <wbaxter gmail.com> writes:
```On Thu, Sep 11, 2008 at 2:04 AM, Manfred_Nowak <svv1999 hotmail.com> wrote:
Bill Baxter wrote:

think of a range more as an iterator plus a sentinel

The problem with both models is, that there are canonical operators one
both models, which are somehow frantically hidden. This is shown

1) by the deliberately constructed compound of `[left,right]
[Diff,Union]'
2) the missing definition of a "subrange"

Both seem undefinable without having some notion of "concatenation"---
and if one has concatenation, a request for the reverse operation
"splitting" is unavoidable.

In fact the semantics of `r.moveTo(s)' seems not to be fully defined in
both approaches.

In fact in your approach of thinking of `r.moveto(s)', the "iterator"
of `s' turns into a "sentinel" for `r', thereby making sentinels and
iterators to synonyms.

Well not necessarily synonyms, because how that iterator is turned
into a sentinel is up to the moveTo method.  But yeh, in most cases
they probably would be implemented under the hood using the same type
-- that's how STL works, after all, and it turns out reasonably well.
And probably how boost's ranges are implemented, just as a pair of
iterators... (though I admit I haven't taken a look at those at all).

--bb
```
Sep 10 2008