1e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoDate: Thu, 8 Feb 2001 14:31:05 -0600 (CST)
2e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoFrom: Chris Lattner <sabre@nondot.org>
3e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoTo: Vikram S. Adve <vadve@cs.uiuc.edu>
4e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoSubject: RE: Type notation debate...
5e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
6e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao> Arrays (without and with size):
7e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao> type ::= '[' type ']' | '[' INT ',' type ']'.
8e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao> 
9e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao> The arrays with size lists the dimensions and the type in a single list.
10e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao> That is just too confusing:
11e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
12e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao>       [10, 40, int]
13e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao> This seems to be a 3-D array where the third dimension is something strange.
14e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao> It is too confusing to have a list of 3 things, some of which are dimensions
15e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao> and one is a type. 
16e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
17e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoThe above grammar indicates that there is only one integer parameter, ie
18e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaothe upper bound.  The lower bound is always implied to be zero, for
19e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoseveral reasons:
20e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
21e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao* As a low level VM, we want to expose addressing computations
22e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  explicitly.  Since the lower bound must always be known in a high level
23e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  language statically, the language front end can do the translation
24e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  automatically.
25e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao* This fits more closely with what Java needs, ie what we need in the
26e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  short term.  Java arrays are always zero based.
27e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
28e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoIf a two element list is too confusing, I would recommend an alternate
29e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaosyntax of:
30e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
31e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaotype ::= '[' type ']' | '[' INT 'x' type ']'.
32e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
33e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoFor example:
34e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  [12 x int]
35e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  [12x int]
36e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  [ 12 x [ 4x int ]]
37e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
38e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoWhich is syntactically nicer, and more explicit.
39e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
40e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao> Either of the following would be better:
41e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao>       array [10, 40] of int
42e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
43e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoI considered this approach for arrays in general (ie array of int/ array
44e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoof 12 int), but found that it made declarations WAY too long.  Remember
45e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaothat because of the nature of llvm, you get a lot of types strewn all over
46e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaothe program, and using the 'typedef' like facility is not a wonderful
47e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaooption, because then types aren't explicit anymore.
48e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
49e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoI find this email interesting, because you contradict the previous email
50e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoyou sent, where you recommend that we stick to C syntax....
51e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
52e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao-Chris
53e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
54