From what I read on the "DIP19: Remove comma operator..." thread it sounded like one of the difficult challenges for tuples is ambiguities created by indexing tuple elements that might also be random access ranges (arrays). It gets especially nasty for single-element tuples.

Would it help if we used something /besides/ the normal index notation for this?

My immediate thoughts were something like:
(int,float) a;
a[[0]] = 1;
a[[1]] = 1.0;

But the idea of introducing the [[ and ]] tokens is probably not going to cut it.

Next I thought of this:
(int[]) a;
a.[0] = new int[10];
a[0] = 1;
assert(a.[0][0] == 1);

Thus a trailing dot in paths with brackets would indicate tuple dereferencing.

Another thought was to use a trailing @ sign for this:
(int[]) a;
a@[0] = new int[10];
a[0] = 1;
assert(a@[0][0] == 1);

In fact, I wonder if the extra brackets are necessary at all:

(int[]) a;
a.0 = new int[10];
a[0] = 1;
assert(a.0[0] == 1);

(int[]) a;
a@0 = new int[10];
a[0] = 1;
assert(a@0[0] == 1);

Assuming I haven't missed some bad interactions with other syntax, then these notations should make tuple element access unambiguous.

Does this help?

Reply via email to