[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: GC, exit-to-system



    Date: Thu, 10 Jul 86 22:25:30 PDT
    From: franz!fizzy!jkf@kim.berkeley.edu


    >> From: David Moon
    >> ...
    >> The concept of calling the GC at a particular
    >> time is not meaningful either; the GC runs in parallel with normal
    >> computation.  I'm sure there are other implementations with different
    >> ideas about these concepts.  They just don't make very much sense to
    >> standardize, because there is so much variation.

    I think that you may have missed the point.  There are certain
    functions performed by many (but perhaps not all) of the
    implementations of common lisp.   Such functions include stopping
    a computation and performing a garbage collection, 
You missed a subtle point.  The LispM systems normal GC stop a
computation only long enough to start the GC.  The computation is not
stopped for the performance of the garbage collection.  There are a lot
of different levels of GC in our system, perhaps more so than in most.
In theory, you could call
	(si:gc-flip-now)
to cause a GC to be started, or
	(si:gc-immediately)
which not only starts it, but the code executing it doesn't return until
the GC completes, BUT, other processes are still allowed to run.
	(si:full-gc)
stops everybody while it does a massive amount of work.  What about the
user interface issues of trying to start a GC when the system is pretty
sure you will run out of room (assuming a copying garbage collector)?
Which of the above functions do you want in the language?  Maybe figure
out how to write one function that is completely overloaded?  What if
you ask a GC to be started but a GC is already in progress?  Do you want
options to say "that's OK, don't do another" and "wait for the current
one and then start a new one"?  What about ways to flip ephemeral spaces
in systems that have ephemeral GCs as opposed to flipping dynamic
spaces?  I think you want the ability to do both.  What about
controlling different forms of ephemeral migration?  I know of at least
four possibilities: (1, normal) next level, (2, dynamic) always to
non-ephemeral, (3, keep) lowest ephemeral level flips and is copied back
into the lowest ephemeral level, (4, collect) lowest ephemeral level
doesn't flip, so things tend to collect at the bottom.  What about
flipping a subset of "areas" for systems where that is meaningful.	
						       and exiting to the
    operating system.  It would be a good thing if the names for these
    functions were the same across all common lisps where such
    functionality exists.    
Which functions?  I've listed anywhere from 5 to 50 possibilities.