Jarrett Billingsley wrote:
The point I'm making here is it doesn't matter whether it uses 'in' or
';' or ':' or '(%)#*@' to separate the loop indices from the container
expression, because there will always be people who feel that another
syntax is better or more natural.  Instead of arguing over minute
details like this, let's worry about the important things, like the
semantics of foreach loops.

I agree. One thing that ranges still don't address is binding multiple values to them:

foreach (a, b, c; range) statement

Steve promoted the idea that the code above is translated to:

{
    T1 a;
    T2 b;
    T3 c;
    auto __r = range;
    for (; !__r.empty; __r.next)
    {
        __r.head(a, b, c);
        statement
    }
}

It's a good idea, and I'd favor e.g. a discussion around it as opposed to one on whether ";" is the proper separator.

Oh, there was another wrinkle: if you have a container, how do you obtain a range from it? I suggested container.all, but then people said that's a step backwards from opApply. I think [] should be used for accessing all of a range. Something that is already a range simply returns "this" from opSlice(). So the code above with this other proposal tucked in becomes:

{
    T1 a;
    T2 b;
    T3 c;
    auto __r = range[];
    for (; !__r.empty; __r.next)
    {
        __r.head(a, b, c);
        statement
    }
}


Andrei

Reply via email to