[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: destructing objects
- To: John Louch <jlouch@apple.com>
- Subject: Re: destructing objects
- From: Steve Strassmann <straz@cambridge.apple.com>
- Date: Thu, 27 Feb 1992 00:05:36 -0500
- Cc: info-mcl
>Lispers,
> Here is my first question for this list, mind my ignorance! I
>have just started tooling around with MCL 2.0xxx and more specifically
>CLOS. Is there a way to destruct a object instanciated by
>(make-instance)?
>
> My conceptualization of how memory is managed in lisp is not
>the greatest. If I set bind some symbol to some value (set a 3) then
>say (setf a 4) what happens to the memory allocated for the 3? Is it
>overwritten or at garbace collection time is ir reclaimed?
>
>Any information on literature regarding CLOS ould also be very helpful
>to me. I take that back any literature or source code at a learning
>level would be appreciated!
>
>Thanks in advance,
>John Louch
>jlouch@apple.com
>jlouch@polyslo.csc.calpoly.edu
>new.guy@applelink.apple.com
Well, welcome to the wonderful world of lisp! Asking how to destroy an
object in Lisp is like asking how to set the dip switches and jumper
pins when you install a new video card into your mac - hey, it just
takes care of itself!
I know it can be a bit unnerving, especially if you're used to
devoting most of your attention to memory management problems.
But don't worry, be happy; spend your copious free time worrying
about the other aspects of your program. That's what high-level
languages are for.
Now, for a more serious answer: Objects are eligible for collection
when there are no longer any references to them. For example,
let's say you make an object, and then wipe out the only reference
in the world to it:
(defclass pizza () ((toppings :initarg :toppings)))
(setf a (make-instance 'pizza :toppings '(pepperoni)))
(setf a (make-instance 'pizza :toppings '(cheese mushroom)))
The pepperoni pizza becomes orphaned when you make the cheese-'shroom
one. Since nobody points to it, sooner or later the garbage collector
will come around and reclaim it.
How does the GC know when something is ready to be collected?
And WHEN does it come along and make a pickup? The short answer is
that garbage is collected in a background task in as unobtrusive a
way as possible, according to an accounting scheme that tries to
be thorough about finding everything that isn't referenced by
something else.
As for books, several good ones on Lisp and CLOS are listed in
Appendix F of the MCL manual.