> On 20 Oct 2016, at 18:01, David Matthews <david.matth...@prolingua.co.uk> > wrote: > > On 20/10/2016 12:14, Rob Arthan wrote: >> During interactive development of a proof script it is usual to try >> things out repeatedly with frequent evaluations of minor variants of >> an attempted proof step until you find one that works. It is ls also >> perfectly possible for a user to develop a ProofPower database the >> way people develop spreadsheets and SQL databases, incrementally >> adding things over a prolonged period of time. It is not clear to me >> how bad the impact would be in these use cases. Is there a way to >> find out how much memory is occupied by compiled code? If so, then I >> could try some experiments to quantify the impact. >> >>> On 19 Oct 2016, at 12:34, David Matthews >>> <david.matth...@prolingua.co.uk> wrote: The new mechanism for >>> handling pieces of code deals with most of the issues apart from >>> the question of garbage collection. I was really trying to get a >>> feeling for how serious this was. From the comments on the mailing >>> list it looks as though this is something that is wanted so I'll >>> try and see if I can find a solution. >> >> >> And thank you for thinking of us! >> >> If it makes the solution easier, I don’t think there is any need to >> include garbage collection for code in the on-the-fly garbage >> collection. I think it would be fine to implement it either as an ML >> function on its own or built into PolyML.SaveState.saveChild (and >> friends) and PolyML.export. >> > > Just one point. There is only a leak for redefinitions of functions while > they are in local memory. If you load a saved state, redefine a function in > it and then save a new state then the old code will be replaced with the new > code, just as before. >
That sounds very promising. Is it also the case that space for code that was only generated to calculate the value of a top level binding will be reclaimed when you save state or export an object file? E.g., the code generated for the right-hand side of the following binding. val fact10 = let fun f i = if i <= 0 then 1 else i * f(i-1) in f 10 end; If so, then the only one of my use cases that might have a problem is interactive development. I strongly suspect this is not going to be significant in practice. As I said, if there is a way to see how much memory is occupied by compiled code, I could do some experiments to see if my suspicion is correct. Regards, Rob. _______________________________________________ polyml mailing list polyml@inf.ed.ac.uk http://lists.inf.ed.ac.uk/mailman/listinfo/polyml