[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
expunging objects from dynamic windows
Date: Fri, 22 Jan 88 11:03 EST
From: Jeffrey Mark Siskind <Qobi@ZERMATT.LCS.MIT.EDU>
I really like the dynamic windows of Genera 7.0, except
there is at least one thing one has to be aware of. The
dynamic lisp listener provides two *separable* (at least
conceptually) feature: scrolling, ... and mouse sensitivity
for things like Mouse-M (describe ...). The thing one has
to be weary of is that if you print out an object like
#<FOO 777777777> that object can't get garbage collected.
If your objects are highly intertwined then if you even
print out *one* temporary object, say while debugging,
that has a handle on all the other temporary objects
which you have created, then you lose because nothing
will be GCed. Now you can of course do a :Clear Output History
but that has two problems. First, you lose scrolling
along with mouse sensitivity. Second, if you forget to
do a :Clear Output History, or if you are running a long
program that is dumping a lot of trace output you lose
because if the EGC flips enough times before you get
a chance to do a :Clear Output History the object move
high enough in the Ephemeral levels to never be collected.
There are four solutions which I suggest that Symbolics
implement, each being an improvement on the previous one.
First, provide a command which can clear the objects
associate with a window without clearing the scrolling
history. This means changing all object references to
presentation string references in the window history.
This and more is done in 7.2, via the :Cleanup option to the :Start GC
command.
Second, provide a command which will clear the
scrolling and/or object history of window except
for the last N pages.
In 7.2, there are options to the :Clear Output History command which do
that and more.
Third, provide a switch setting which I can set to
ask that objects never be associated with a window,
just their presentation strings. I can set such a
switch when I know that I am doing debugging tracing
output and want scrolling history but can forgo
mouse sensitivity.
(dw:with-output-as-presentation (:allow-sensitive-inferiors nil)
...)
Ideally, I could set this to
automatically preserve only the last N pages
of object history and only the last M pages of
scrolling history where M>=N.
Fourth, provide a switch setting where the EGC was
smart enough to automatically purge object references
more than N pages back just before it did a flip.
This way I could get the best of all worlds until
a flip came.
I don't believe that EGC should be destructive behind your back.
Certainly slowing it down by making it loop over every window ever
created would unacceptable to most people.
Anyway, it's fairly simple to implement such a thing in 7.2, if you
really wanted to. Just put the form which does the work onto
SI:GC-EVERY-FLIP-LIST.
It would be nice if you were running 7.1. Anyway, thanks for the
suggestions.
Anybody feel like hacking this?
Jeff