Animorphic ST (Strongtalk) released!

Andreas Raab Andreas.Raab at gmx.de
Sun Jul 21 14:57:06 UTC 2002


Hi Nevin,

Thanks for the info. I think I'll just have to try it out :-) I still
find it hard to believe that code which was written with exception
throwing behavior in mind would fail if you introduce message eating
behavior but I guess only experience can really tell the ups and downs.

Cheers,
  - Andreas

> -----Original Message-----
> From: squeak-dev-admin at lists.squeakfoundation.org 
> [mailto:squeak-dev-admin at lists.squeakfoundation.org] On 
> Behalf Of Nevin Pratt
> Sent: Sunday, July 21, 2002 4:21 PM
> To: squeak-dev at lists.squeakfoundation.org
> Subject: Re: Animorphic ST (Strongtalk) released!
> 
> 
> 
> 
> Andreas Raab wrote:
> 
> >>
> >>isNil ifTrue: (which would work, as it's a message send)
> >>== nil ifTrue: (which wouldn't work)
> >>ifNil: (which also wouldn't)
> >>
> >>etc. in Squeak.
> >>
> > 
> > Nah... I meant the "real thing", e.g., make UndefinedObject 
> be "message
> > eating" not some arbitrarily new object. All of the above 
> should work
> > perfectly well if you implement them.
> 
> 
> The main reason I recommended against this in my article is because I 
> found from experience that making UndefinedObject be "message eating" 
> breaks large amounts of existing code.  Implement it 
> yourself, and you 
> will discover the same thing very rapidly.  For example, streams in 
> VisualWorks deliberately throw and catch exceptions as part of the 
> normal processing.  If you eliminate the exception throwing, the code 
> breaks.
> 
> So, rather than modifying UndefinedObject, I attempted to mix the 
> paradigms.  I immediately encountered difficulty trying to 
> mix existing 
> nil behavior with a message eating Null class within the same 
> software 
> layer.  I.e., things would break when I would try mixing it 
> within the 
> Presentation Layer, because existing widgets, etc., in the 
> Presentation 
> Layer again expect alternate nil behavior.  Of course, one reason for 
> this is simply a rehash of the same issue above.
> 
> I also encountered difficulties trying to mix the paradigms in 
> VisualAge, where #isNil: and #notNil: are optimized away and are not 
> true message sends.  Another Smalltalk that doesn't optimize away 
> #isNil: and #notNil: might yield different results, though.  But even 
> then, there is still the problem of '== nil' that many 
> programmers like 
> to write (but not me) if you are trying to mix the paradigms.
> 
> As mentioned in the article, the entire experience was 
> originally done 
> as an experiment, and was motivated from my Objective-C 
> experience.  I 
> was initially apprehensive about it, but have since concluded 
> that most 
> of that apprehension was just excessive paranoia.
> 
> I have long concluded that the paradigm is very useful when 
> applied to 
> Smalltalk, and is trouble-free, *if* the entire software 
> layer that it 
> is being used in has been written with that paradigm in mind. 
>  And, for 
> practical reasons, I feel that the only layer that you have 
> any chance 
> of achieving that is the domain layer (if at all), since that is the 
> layer you most control.  But regardless of the layer, it requires the 
> buy-in of the other team members writing code for that layer, or it 
> won't work.
> 
> So, within that narrow usage, I find it to be a very useful paradigm. 
> But I agree it is not suitable for the general case.
> 
> Interestingly enough, Dolphin Smalltalk has had a 
> 'DeafObject' class in 
> it's image since about 1996, which predates my article.  The 
> 'DeafObject' does essentially what my 'Null' does.
> 
> Nevin
> 
> 
> 
> 
> 




More information about the Squeak-dev mailing list