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