We pretty solidly have Array as a reference type. However, it's in the list of things that make a compact array:
my Array @ragged2d;
I guess this is fossil?
S09 says, "A compact array is for most purposes interchangeable with the corresponding buffer type.". It then goes on to note that these are supposedly the same:
my uint8 @buffer;
my buf8 $buffer;
This is odd for one before we never vivified a buf8 in $buffer (so it'd seem you need a ".= new"), but more generally we need to decide how much we believe this section. If we really do then it'd mean that (lowercase) array goes away, but then that buf can also be instantiated with nums and the like.
How much do we still believe in || as a semi-colon level argument flattener? It's used like this:
@shape = 4, 2;
my int @ints[ ||@shape ];
At the moment we don't parse | or || in subscripts in general, and || isn't implemented.
Surely these have to use binding rather than assignment?
my num @nums = Array of num.new(:shape(3;3;3));
my num @nums .=new():shape(3;3;3); # same thing
How does this:
my @grid[**]; # Any number of dimensions
Differ from not having ** there at all, or from:
my @grid[*];
Semantically, and from:
my @grind;
Since in all these cases, we can auto-viv an Array to get another dimension?
I don't see how this can possibly work:
@array[].shape # the integer indices
@array{}.shape # the user-defined indices
Since a zen slice simply hands back a Parcel (List after GLR?) of the values.