Future of smalltalk (was Re: election details *PLEASE READ*)

Andreas Raab andreas.raab at gmx.de
Sat Mar 3 07:33:48 UTC 2007


Lex Spoon wrote:
> Wasn't there a big collections refactoring done with traits?  I have
> been meaning to dig it up and read through it, but have never found
> the time.

This was one of the academic exercises I was referring to, see here:

http://citeseer.ist.psu.edu/581397.html

Also, its main focus was on squeezing entropy out of the system (i.e., 
eliminate code duplication) not necessarily improvements in design (the 
paper claims some but I'm pretty sure that *any* serious bit of 
refactoring of a 20 year old class hierarchy could improve a few things ;-)

> Here's one use of them, though, that I use all the time in Scala's
> variation on traits.  You can make Squeak's Magnitude be a trait
> instead of an abstract class.  That is, given a < method, which is
> abstract in Magnitude, you can have Magnitude define all the other
> methods for you.

How interesting. Does Scala use traits extensively?

> Or closer to your heart, Andreas, how would you like to have a
> Rectangular trait for all those #left, #right, #topLeft, etc. methods?
> It would require a #rectangle method, which for Rectangle is "yourself"
> and for Morph is "bounds".  Then all these helper methods
> would get defined for you by the trait.

Did I mention toy examples before? ;-) Yes, that is one of those. 
Unfortunately, in real code I only ever have that problem in about a 
single base class so it's usually not worth creating an extra entity 
(trait). In addition, I have found that I prefer to carefully choose 
which parts of the interface to expose and which ones not - Players in 
Tweak expose a partial set of rectangle operations, a partial set of 
collection operations but not both to the full extent simply because 
that would be crazy overload. Where I need the full interface I prefer 
aspects so that if you really really need #squishedWithin: you say 
"player bounds squishedWithin: aRectangle" instead. Which gives you the 
advantage of providing a useful, filtered interface as the default 
without eliminating access to the full interface. And finally, the 
rectangle interface is very stable and hardly ever changes so evolution 
of interfaces isn't really an issue either.

> This usage of traits may be small one by one, but they are enough to
> convince me thre are some very nice uses of traits that are not
> available in Smalltalk.  What they do is take a thin interface and
> widen it to a rich interface.  They let you *define* classes using the
> thin interface, and *use* them with the rich interface.

So where are these uses? Can you point me to any in real applications?

> Anyway, I don't know anything about the Squeak version.  My day jobs
> have kept me too busy to look into Squeak's traits as I would like to.
> However, I can vouch for the feature, just based on the above
> examples.

Well, I'm still on the lookout trying to find a really convincing 
example of use for traits. If you can point me to one (e.g., point me to 
actual code in an actually running system) I'd really appreciate it.

Cheers,
   - Andreas



More information about the Squeak-dev mailing list