[MLton] ref flattening enabled
Stephen Weeks
MLton@mlton.org
Fri, 23 Jul 2004 17:57:40 -0700
> I am ashamed to say that I wasn't thinking so much of space safety
> as much as of space efficiency, but ...
I don't see any problems with space efficiency. Ref flattening always
saves space, by eliminating an indirection and a header word, and
possibly more (when there are beneficial interactions with packing).
The only problem I see is with extra fields that may get kept alive.
> Is 2 really doable? Surely it would have to be some kind of
> approximation, right? I.e., it would take some kind of must-alias
> analysis (i.e., this variable must keep this object alive) to get
> this right.
It does require approximate must-alias information, but a very simple
syntactic one will work. I.E. if x is a variable bound to some tuple,
and r is a ref syntacically extracted from x, then we allow r to be
(more properly, don't prevent r from being) flattened into x if in
every basic block that refers to r, x is live.
> For efficiency, I guess that if Dan Wang's box primitive went in
> then I could at least forcibly stop the flattening (but not force
> the flattening).
Yes, I am planning to put that primitive in soon. It seems nice, and
could allow us to do even more aggressive flattening, leaving it up to
the programmer to throttle it back.