Am 16.07.2010 11:12, schrieb Heywood Floyd:
Lars T. Kyllingstad Wrote:

I do agree that, if possible, the language should match how most people
think.  But in this case, it is impossible, because of templates.  How
would the following example work with T = int[3], if arrays worked the
way you want?

   struct MyArray(T)
   {
       T[] a;
   }

C doesn't have this issue, because it doesn't have templates.  And I'll
have my templates over C-style array declarations any time, thank you. :)

-Lars


Well, I suppose the obvious way is to introduce array as a proper type, and not
just as syntactical sugar. For instance, consider:

array[11] int myArr;
...

I don't really like it. Of course the order of indices feels better but it breaks the rule of reading types from right to left. It also introduces more parenthesis and a new keyword into types (amongst const, immutable and delegate etc). Consider:
  shared array[3](const( array[5] immuttable((SList!(int)*)[]) ))
WTF, that doesn't look good. I would be a real type if your answer was accepted.

It was
  shared const( immutable(Slist!(int)*[])[5] )[3]
which reads perfectly from right to left.

What about this:
  // int[width,height] as sugar for int[height][width]
  int[width,height] arr = ...;
  // arr[x,y] as sugar for arr[x][y]
  int element = arr[x,y];
  // then this works as expected
  int[height] column = arr[x];

Reply via email to