[Newbies] Why do obsolete classes stick around?

Matthew Fulmer tapplek at gmail.com
Thu Jul 3 21:35:50 UTC 2008


On Thu, Jul 03, 2008 at 05:44:15PM +0200, Bert Freudenberg wrote:
> 
> Am 03.07.2008 um 17:40 schrieb Randal L. Schwartz:
> 
> >>>>>> "Bert" == Bert Freudenberg <bert at freudenbergs.de> writes:
> >
> > Bert> Smalltalk does not work that way. If the class format changed,  
> > all
> > Bert> existing instance are bulk-migrated to the new class (by  
> > creating new
> > Bert> instances and doing a forward-become on all of them).
> >
> > Well, so this *is* the newbies list... I can *ask*... :)
> >
> > When does "anObsoleteFooClass" show up then?  I know there are  
> > checks for it,
> > and I think I made one once.  When does that happen?  I could probably
> > investigate it myself, but maybe someone can answer this and save me  
> > a half
> > hour of poking around.

When the new class is made, the old class is made obsolete.
Pointers to the old class coming from Smalltalk, the superclass,
and the subclasses are updated. Instances are migrated. After
that, the obsolete class will be garbage collected, unless there
are pointers to it from other places. These "other places" the
class is held can vary wildly:

- Literal references from methods (when the class referenced
  directly as a global). "SmalltalkImage current
  fixObsoleteReferences" fixes these.
- Various registration services, including, but not limited to:
  - TheWorldMenu
  - Flaps
  - FileList
  - SystemChangeNotifier
- Random caches that are not careful enough. I fixed 3 or 4
  cache bugs in Monticello that caused obsolete classes to stick
  around unnecessarily

-- 
Matthew Fulmer -- http://mtfulmer.wordpress.com/


More information about the Beginners mailing list