I've just updated to the latest SVN of poly, and my compile times have
ballooned up. Prodding it a bit, it looks to me like there's a memory
leak in the interpreter.
Here's what I do to get it to happen:
1. Fire up poly and load a modest heap (59 megs) containing about 100
structures and functors. top shows poly's RAM usage goes to a little
over 59 megs.
2. Run some pretty functor-heavy code, including some code that looks
(essentially) like this:
structure Structure1 = Functor1(....);
structure Structure2 = Functor2(structure Foo = Structure1);
structure Structure3 = struct open Structure1; Structure2; end
structure Structure4 = Structure3 : SIG
Admittedly, these are some pretty big structs, and poly's RAM usage
hits over a gig, and doesn't go back down once execution is finished.
"PolyML.fullGC ();" seems to have no effect.
3. Save the heap, still < 70 megs.
4. Close and open poly w new heap, RAM usage still < 70 megs
So, the compile-time slowness seems to be poly filling the system's
RAM and starts swapping pages. I included the code above on the off
chance there's some cyclic dependency between the structs that keeps
some junk from being garbage collected.
I can give SVN links if you want to see the offending code itself, but
its part of a pretty large project, so I don't know how helpful that
would be.
Thanks!
Aleks