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