[MLton] bool array size
   
    Stephen Weeks
     
    MLton@mlton.org
       
    Thu, 16 Mar 2006 15:10:40 -0800
    
    
  
> What makes MLton decide to do the flattening or not. 
It's a complicated whole-program flow analysis plus some local
conditions to ensure space safety.  Frankly, I'm not very happy with
it, and it is far too brittle.
> In the case with the
> 	{ key: Word.word, ord: int }
> elements, I never handle any of the elements except in the array so
> if it didn't flatten them, I can't imagine when it would.  Certainly
> there was no sharing.
I agree; I would expect it to flatten such a case.  I just checked the
following simple program, and the array is flattened, so it at least
happens sometimes.
----------------------------------------------------------------------
val a = Array.tabulate (13, fn i => (i, i + 1, i + 2))
val (x, y, z) = Array.sub (a, 10)
val 33 = x + y + z
----------------------------------------------------------------------
The thing to look for is a "large" word array type in the RSSA.  For
the above code, I see the following line in the RSSA
  pt_10 = Array {elt = Word96, hasIdentity = true}
That says that there is an array that has 96-byte elements (i.e. 3
words).
There's not much more I can say about your code without seeing it.