Hello. I'm wondering why in D if you declare a fixed multi dimensional array, you have to reverse the index order to access an element. I know it has something to do with how tightly [] bind, but the consequence is that it seems so different to other languages, it makes it error prone. So here's some code that compiles and works:
import std.stdio; int main() { int[3][5] marr; int i = 0; foreach( j, ref a; marr) { writefln( "%s: a.length = %s", j, a.length); foreach( ref v; a) { v = i++; } } /* This doesn't work. marr[0][>=3] is out of bounds!! writefln( "marr[0][0] = %s", marr[0][0]); writefln( "marr[0][1] = %s", marr[0][1]); writefln( "marr[0][2] = %s", marr[0][2]); writefln( "marr[0][3] = %s", marr[0][3]); writefln( "marr[0][4] = %s", marr[0][4]); writefln( "marr[1][0] = %s", marr[1][0]); writefln( "marr[1][1] = %s", marr[1][1]); writefln( "marr[1][2] = %s", marr[1][2]); writefln( "marr[1][3] = %s", marr[1][3]); writefln( "marr[1][4] = %s", marr[1][4]); */ writefln( "marr[0][0] = %s", marr[0][0]); writefln( "marr[1][0] = %s", marr[1][0]); writefln( "marr[2][0] = %s", marr[2][0]); writefln( "marr[3][0] = %s", marr[3][0]); writefln( "marr[4][0] = %s", marr[4][0]); writefln( ""); writefln( "marr[0][1] = %s", marr[0][1]); writefln( "marr[1][1] = %s", marr[1][1]); writefln( "marr[2][1] = %s", marr[2][1]); writefln( "marr[3][1] = %s", marr[3][1]); writefln( "marr[4][1] = %s", marr[4][1]); writefln( ""); writefln( "marr[0][2] = %s", marr[0][2]); writefln( "marr[1][2] = %s", marr[1][2]); writefln( "marr[2][2] = %s", marr[2][2]); writefln( "marr[3][2] = %s", marr[3][2]); writefln( "marr[4][2] = %s", marr[4][2]); writefln( ""); return 0; } Anyways, perhaps I am doing something wrong, or I have been writing too much C code. What are your thoughts?