DoIts and selector removal

Stephen Pair spair at advantive.com
Mon Dec 10 00:35:59 UTC 2001


Certainly...it appears to work fine, and performs much better under
certain circumstances.  I just don't know if there's something I'm
missing.

- Stephen

> -----Original Message-----
> From: squeak-dev-admin at lists.squeakfoundation.org 
> [mailto:squeak-dev-admin at lists.squeakfoundation.org] On 
> Behalf Of Stephan Rudlof
> Sent: Sunday, December 09, 2001 5:29 PM
> To: squeak-dev at lists.squeakfoundation.org
> Subject: Re: DoIts and selector removal
> 
> 
> Dear Stephen,
> 
> I think you are asking for an answer with a deeper 
> explanation (which I'm not able to give (without looking into 
> the system at least ;-) )), but I have a question, too:
> 
> Have you tried your proposed change? With which results 
> (correctness, speed)?
> 
> Greetings,
> 
> Stephan
> 
> 
> Stephen Pair wrote:
> > 
> > I've noticed that doits appear to be taking a long time to run (I 
> > recently had a process that seemed to take much longer than it 
> > should...it involved a number of calls to 
> Compiler>>evaluate:).  After 
> > investigating, I realized that every DoIt invokes a 
> #become: operation 
> > to atomically swap out the method dictionary with a copy 
> that has the 
> > #DoIt method removed.  Ah...
> > 
> > So, the question:  Is this really necessary?  Can't we just 
> store the 
> > new method dictionary in the methodDict slot of the class?
> > 
> > Can we safely change the following method:
> > 
> > Behavior>>removeSelectorSimply: selector
> >         "Assuming that the argument, selector (a Symbol), 
> is a message 
> > selector
> >         in my method dictionary, remove it and its method."
> > 
> >         | oldMethod |
> >         oldMethod _ self methodDict at: selector ifAbsent: [^ self].
> >         self methodDict removeKey: selector.
> > 
> >         "Now flush Squeak's method cache, either by selector or by 
> > method"
> >         oldMethod flushCache.
> >         selector flushCache.
> > 
> > To be:
> > 
> > Behavior>>removeSelectorSimply: selector
> >         "Assuming that the argument, selector (a Symbol), 
> is a message 
> > selector
> >         in my method dictionary, remove it and its method."
> > 
> >         | oldMethod newDict |
> >         oldMethod _ self methodDict at: selector ifAbsent: [^ self].
> >         newDict _ self methodDict removeKeyNoBecome: selector.
> >         methodDict _ newDict.
> > 
> >         "Now flush Squeak's method cache, either by selector or by 
> > method"
> >         oldMethod flushCache.
> >         selector flushCache.
> > 
> > This should also make fileIns a bit faster, as well as removing 
> > methods in general.
> > 
> > - Stephen
> 
> -- 
> Stephan Rudlof (sr at evolgo.de)
>    "Genius doesn't work on an assembly line basis.
>     You can't simply say, 'Today I will be brilliant.'"
>     -- Kirk, "The Ultimate Computer", stardate 4731.3
> 
> 





More information about the Squeak-dev mailing list