Oleksiy:
1. What is the rationale behind "prefix declaration" of an
array? Using right-to-left order to declare an array and
left-to-right order to access elements seems confusing.
I think the way Go language declares arrays and pointers is a bit
better. But for the rationale of this part of D design others
should answer you.
2. Consider this code:
dchar[3][5] arr = '.';
arr[2][] = '!';
writeln();
writeln(arr);
Result: ["...", "...", "!!!", "...", "..."]
Which is expected. According to Ali Çehreli's tutorial,
omitting the index of an array will result in operation being
applied to the whole array (in this case element of another
array).
change the code:
- arr[2][] = '!';
+ arr[][2] = '!';
Still getting the same result: ["...", "...", "!!!", "...",
"..."]
I would expect to get: ["..!", "..!", "..!", "..!", "..!"]
since omitted index would apply the operation to all elements
of the first dimension of the array.
What am I missing?
Ali Çehreli's tutorial is not correct, or you have not understood
it correctly.
In D there are dynamic arrays and fixed sized arrays.
When you write:
dchar[3][5] arr;
You are allocating a fixed sized matrix in place (often on the
stack or you are defining one inside another class instance or
struct instance).
The array-wise (vector operation) is done only one the last
array, so this works:
arr[2][] = '!';
But:
arr[][2] = '!';
is a totally different thing. You are slicing the rows, and then
you are assigning something to all the items of the third row.
Always compile your D code with "-wi", it gives you a warning
here, helping you avoid your mistake. I am asking all the time to
produce warnings on default, but Walkter&Andrei don't even answer
"No" to my request.
Bye,
bearophile