[MLton] Profile driven packing...
   
    Daniel C. Wang
     
    danwang@CS.Princeton.EDU
       
    Tue, 27 Apr 2004 15:29:04 -0400
    
    
  
Given that MLton now has lots of cool bit-packing opts built in, I just 
wanted to mention one of my pet optimizations that I always wanted to add 
but never found the time too do
Consider a simple datatype
datatype t = T of Word32.word * Word32.word
Lets say you run a space profiler or via some domain knowledge happen to 
know that most of the time you are just storing small words...
one could "optimize" the above to
datatype t = T1 of Word16.word * Word15.word
            | T2 of Word32.word * Word32.word
the basic idea is to use profile driven represenations of datatypes to get 
better space utilization and possibly better cache locality.
The real trick is to make this all transparent to the programmer so they 
don't know what's going on behind the scenes...
I was going to do this once in SML/NJ but there were so many things that got 
in the way.. I suspect MLton has almost all the infrastructure to do this 
sort of thing.. except for the very detailed heap-profiler.....
Anyway, just food for thought..
BTW just as a user feed back level.. is there some way of asserting that a 
particular ML type will be laided out/packed in a certain way?
I'd be happy to see a pragma/comment
So that I can can say something like
    datatype t = A of Int31.int | B of Int31.int (*:packed: unboxed 32*)
and have the compiler complain when my expectation is not meet?