Date: Thu, 8 Feb 2001 14:31:05 -0600 (CST) From: Chris Lattner To: Vikram S. Adve Subject: RE: Type notation debate... > Arrays (without and with size): > type ::= '[' type ']' | '[' INT ',' type ']'. > > The arrays with size lists the dimensions and the type in a single list. > That is just too confusing: > [10, 40, int] > This seems to be a 3-D array where the third dimension is something strange. > It is too confusing to have a list of 3 things, some of which are dimensions > and one is a type. The above grammar indicates that there is only one integer parameter, ie the upper bound. The lower bound is always implied to be zero, for several reasons: * As a low level VM, we want to expose addressing computations explicitly. Since the lower bound must always be known in a high level language statically, the language front end can do the translation automatically. * This fits more closely with what Java needs, ie what we need in the short term. Java arrays are always zero based. If a two element list is too confusing, I would recommend an alternate syntax of: type ::= '[' type ']' | '[' INT 'x' type ']'. For example: [12 x int] [12x int] [ 12 x [ 4x int ]] Which is syntactically nicer, and more explicit. > Either of the following would be better: > array [10, 40] of int I considered this approach for arrays in general (ie array of int/ array of 12 int), but found that it made declarations WAY too long. Remember that because of the nature of llvm, you get a lot of types strewn all over the program, and using the 'typedef' like facility is not a wonderful option, because then types aren't explicit anymore. I find this email interesting, because you contradict the previous email you sent, where you recommend that we stick to C syntax.... -Chris