[MLton] array flattening
Daniel C. Wang
danwang@CS.Princeton.EDU
Fri, 09 Jul 2004 11:43:07 -0400
Oh yes.. please document a magic prim/type con. so the programmer can be
guaranteed that The array flatter won't "do the wrong thing". Especially,
when I plan to copy array's a lot, or am relying on the implicit pointer
sharing for some algorithmic improvement.
I'd suggest introduction a new data con.
datatype 'a boxed = B of 'a
or maybe
type 'a boxed
val box: 'a -> 'a boxed
val unbox : 'a boxed -> 'a
If someone like Henry is really worried about this he can create an array of
boxed elements, and feel safe that things behave the way they should! If I
remember correctly SML/NJ always boxes datatypes even nullary ones, because
users expect this representation when writing programs.
While, we are on the subject
type 'a ext_rep
val toExtRep: 'a -> 'a ext_rep
val fromExtRep: 'a ext_rep -> 'a
where "ext_rep" means external representation. i.e. tell MLton to turn off
all data representations for this type. So I can portably access the
structure via C or some other evil FFI.
Henry Cejtin wrote:
> I am very interested in what the array flattening thing will do since its
> lack is one of the biggest space inefficiencies that I see in generated MLton
> code. Despite that, I guess that it will cause some things to get worse.
> E.g., if I create an array with
> Array.array (1000000, (0, 0))
> then it currently that takes only 4 bytes per element, while, I assume, your
> proposed optimization will flatten out things, so it will be 8 bytes per.
>