Rust switches to external iteration

Timon Gehr timon.gehr at gmx.ch
Thu Jul 4 01:18:21 PDT 2013


On 07/04/2013 07:04 AM, Andrei Alexandrescu wrote:
> Evidence we've done the right thing by emphasizing ranges instead of
> opApply.
>
> http://www.reddit.com/r/programming/comments/1hl2qr/rust_07_released/
> https://mail.mozilla.org/pipermail/rust-dev/2013-June/004599.html
>
> Andrei

Well, probably, but implementing ranges is still too tedious.
It is very likely that rust is going to fix that.

It should be as simple as:

auto map(alias a,R)(R r){
     foreach(x;r)
         yield a(x);
}

auto filter(alias a,R)(R r){
     foreach(x;r)
         if(a(x))
             yield x;
}

auto take(R)(R r,size_t i){
     while(i--&&!r.empty){
         yield r.front;
         r.popFront();
     }
}

auto joiner(R,S)(R r,S s){
     if(r.empty) break;
     foreach(x;r.front)
         yield x;
     r.popFront();
     foreach(rr;r){
         yield s;
         foreach(x;rr)
             yield x;
     }
}

auto cprod(R,S)(R r,S s){
     foreach(x;r)
         foreach(y;s)
             yield tuple(x,y);
}

One can get painfully close with basically no effort (DMD regressed on 
it though):
http://dpaste.dzfl.pl/baa538af


Ideally the compiler would automatically turn definitions similar to 
those above into auto return function templates that create instances of 
range types.

The issue is how to design it to make it useful for generic wrapper 
ranges that should forward the source range capabilities.


More information about the Digitalmars-d mailing list