Thank you very much for directing me to those links, I’ll add my big 
to the thread on internals.rust-lang.org.
In my opinion tuple notation would be very convenient and clear. The specific iteration sequence could be specified through brackets nesting.
For instance:
for (x, y, z) in (1..10, 2..11, 3..13) {...}
would give ((1,2,3), (2,3,4) … (9,10,12))
for (x, y, z) in (1..10, (2..11, 3..13)) {...}
would give ((1,2,3), (1,3,4) … (2,2,3), (2,3,4) … (9,10,12))
for (x, y, z) in (1..10, (2..11, (3..13))) {...}
would give ((1,2,3), (1,2,4) … (1,3,3), (1,3,4) … (9,10,12))
This notation in my opinion would be much clearer and compact than using .zip().
I’ll add here another point which is still related to iterating through two arrays. Things get more complex with multidimensional arrays. In this case instead of writing:
for row in m1.iter_mut() { for el in row.iter_mut() {...} }
it would be convenient to be able to write:
for el in m1.iter_mut().iter_mut() {...}
I’ll clarify this point with the following example. I have two 2D arrays, and I need to cycle through each element of them, so I could write for instance:
for i in 0..s {
for j in 0..s {
m2[i][j] = m1[i][j].powi(2);
}
}
To avoid bound checking, I would prefer to use .iter(), but this is what I need to write with the current Rust notation:
for (m1_row, m2_row) in m1.iter().zip(m2.iter_mut()) {
for (m1_el, m2_el) in m1_row.iter().zip(m2_row.iter_mut()) {
*m2_el = m1_el.powi(2);
}
}
This looks quite complex, it would be nice to be able to write:
for (m1_el, m2_el) in (m1.iter().iter(), m2.iter_mut().iter_mut()) {
*m2_el = m1_el.powi(2);
}
Here is another example:
for i in 0..s {
for j in 0..s {
if ((m2[i][j]-m1[i][j])/m1[i][j]).abs() > 1E-6 { test = false; }
}
}
In this case I could not figure out how to use .iter() at all… (I tried different possibilities but I always get compilation errors one way or another).
Thanks
Edit: now the following code works, I guess something was corrected in the last nightly releases:
for (m1_row, m2_row) in m1.iter().zip(m2.iter()) {
for (m1_el, m2_el) in m1_row.iter().zip(m2_row.iter()) {
if ((m2_el-m1_el)/m1_el).abs() > 1E-6 { test = false; }
}
}