Kenji Hara:
My position to such a feature is constant.
Even if your opinion is not changed, I have to show that common
tuple-related features to the other persons that are reading this
thread, because it's an an idea to keep in account (even if it's
refused), and some other person could have an opinion different
from yours.
However, array unpacking would require *hidden* runtime
boundary check.
In above example code,
assert(tup[2].length == 2);
// or
if (tup[2].length != 2) throw Error("Runtime mismatch of
unpacking
pattern");
// or similar
should be implicitly inserted by compiler, even in @system code.
I'm not sure that is acceptable cost or not.
Runtime boundary checks and tests are not needed if you unpack a
fixed-sized array:
auto tup = Tuple!(int, string[2])(1, ["red", "blue"]);
auto {x, [c1, c2]} = tup;
Regarding the de-structuring of dynamic arrays, I think it's not
too much different than this:
void main() {
int[] a = [10, 20, 30];
int[2] b = a;
}
If you compile and run it without switches, you get at run-time:
object.Error: lengths don't match for array copy, 2 = 3
While I receive no run-time errors if I compile with
-noboundscheck.
Bye,
bearophile