Subject: Re: self-hosting gc
From: Erik Naggum <erik@naggum.net>
Date: Fri, 01 Mar 2002 23:00:22 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3224012428193198@naggum.net>

* "Martin Simmons" <znegva@xanalys.com>
| Yes, but the two-space model usually assumes equal sized spaces.  If
| from-space is almost full of live data you won't have much room in the
| to-space for data allocated during the copying.

  I assume that if this technique is used at all, it is used all the time,
  it is not suddenly used in a system that did not do this previously, but
  your argument looks like you think someone would suddenly start to do
  some allocation in the garbage collector of a Common Lisp system that had
  never done this before.  I find this a rather peculiar inability to see
  the simplest possible ramification of a suggestion: that it be used all
  the time.  So, at least some of the garbage in from-space is the direct
  result of its collection phase of what is now to-space, right?  In other
  words, there is at least as much space as you allocated last time you
  collected.

  Also, what happens in a system that does not allocate during collection?
  Do they crash and burn if they they have to grow their new-space because
  it did not release enough space on the last allocation?  No?  If not,
  survival tactics of a similar kind _might_ be re-usable in a collector
  that does allocation, don't you think?

  In other words, your fake "problem" does not exist.  If it should spring
  up nonetheless, the solution is the same as for a system that does not
  allocate during collection.  Worst case, we start garbage collection some
  time prior to actually hitting the roof of the available space.  Yet none
  of these very trivial solutions came to mind between starting to write
  your article and deciding to post it after it was written.  How come?

| Also, the subset of Lisp available will be constrained to things that can
| run safely at any allocation point.  E.g. you can't use anything that
| alloctates while holding a lock (I'm assuming the is keeping some data
| structure consistent).

  This makes even less sense than your previous, non-existing problem.
  What other parts of the system inhibits allocation while being locked?
  Please remember that garbage collection happens at a time when the memory
  allocation subsystem has the control of the system, so if you had a lock
  and you never allocated anything before releasing it, you would never
  trigger a garbage collection in the first place.

  Do not waste my time by trying to make me think for you.  Think and post
  in that order. please.

///
-- 
  In a fight against something, the fight has value, victory has none.
  In a fight for something, the fight is a loss, victory merely relief.