RFC on range design for D2
Sergey Gromov
snake.scaly at gmail.com
Tue Sep 9 03:31:17 PDT 2008
Andrei Alexandrescu <SeeWebsiteForEmail at erdani.org> wrote:
> Sergey Gromov wrote:
> > Denis Koroskin <2korden at gmail.com> wrote:
> >> 5) I don't quite like names left and right! :) I think they should
> >> represent limits (pointers to begin and end, in case of array) rather that
> >> values. In this case, built-in arrays could be implemented as follows:
> >>
> >> struct Array(T)
> >> {
> >> T* left;
> >> T* right;
> >> size_t length() { return right-left; }
> >> ref T opIndex(size_t index) { return left[index]; }
> >> // etc
> >> }
> >>
> >> The rationale behind having access to range limits is to allow operations
> >> on them. For example,
> >> R.left-=n;
> >>
> >> could be used instead of
> >> foreach(i; 0..n) {
> >> R.pop();
> >> }
> >
> > Now you stepped onto your own landmine. :) "R.left-=n" extends the
> > range beyond its beginning with unpredictable consequences. That's why
> > such operations shouldn't be easily accessible.
>
> Oh I thought it's R.right -= n.
>
> It has become clear to me that a range never increases. It always
> shrinks. It can increase if fused to another range (I'm thinking of
> relaxing the fusion operations to allow for overlapping/adjacent ranges,
> not only ranges that include one another). But without extra info from
> the container a range can never grow.
It was obviously a typo, but a very dangerous typo indeed.
More information about the Digitalmars-d-announce
mailing list