Suppose I have an array a = [1, 2, 3, 4, 5].
I can index into it at a single value: a[2] == 2. I can index it with a range: a[2:4] == [2, 3, 4]. I can even get the whole array back with a[:] == a.
Where this pattern breaks down is when writing a one-sided range: a[3:] != a[3:5] == [3, 4, 5].
Yes, we have end for this purpose, and as of v1.4, begin for ranges starting at the beginning of an index.
But is there a technical reason why syntax like a[3:] can’t be translated to a[3:end], yielding [3, 4, 5]? Or similarly, why a[:3] can’t become a[begin:3] == [1, 2, 3]? This feels cleaner, and is similar to Python slice syntax.
This syntax would even more useful in multidimensional arrays, while remaining unambiguous (as far as I can tell). So instead of b[3:end, begin:4], you’d have b[3:, :4].
Currently, a[3:] yields a range syntax error:
ERROR: syntax: missing last argument in "3:" range expression
However, a[:3] is interpreted as a[3]. While this is valid code, I don’t believe that anyone would intentionally write this expecting to get a[3].
Would it be possible to integrate this syntax into Julia without breaking any existing code or adding too much parse logic?