Traits approaching mainstream Squeak

stéphane ducasse ducasse at iam.unibe.ch
Tue Aug 30 13:37:29 UTC 2005


Hi dean

do you ***really*** think that the Collection hierarchy is a toy  
example....
I'm not sure that we are talking about the same.

On 30 août 05, at 02:28, Dean_Swan at Mitel.COM wrote:

>
> While I find all this discussion fascinating, I would like to share  
> a few thoughts on the idea of including Traits in mainstream Squeak.
>
> My first concern is performance.  Since Traits carry no state, they  
> will need to use accessor methods and message sends are clearly  
> much slower than direct instance variable access.
>
> My second concern is regarding how Traits should/could/would be  
> used.  All of the examples that I have seen so far, including the  
> refactoring of the Collection hierarchy, seem to me to be "toy"  
> problems.  I would be interested to read about non-trivial cases  
> where Traits would solve a significant real world problem.
>
> It would seem to me that the kind of reuse that Traits enables is  
> the kind that isn't apparent at design time, since individual  
> classes of object are usually designed separately and often by  
> completely different people.  The common behavior and opportunity  
> for code reuse might only become apparent after the initial design  
> is implemented.  It has been my experience that once something is  
> implemented and working, unless there is a compelling reason to  
> justify it, the code is never revisited.  Management is generally  
> focused on allocating resources to things that will yield either an  
> opportunity for increased revenues, or reduced costs, and code  
> "cleaning" is rarely viewed as either.  If it ever gets done (code  
> cleaning), it is usually silently piggybacked on required bug fixes  
> by individual developers who feel it is important.  Am I in the  
> minority here, or is this how commercial software development works  
> in general?


Cleaning your design does not solve the problem that traits solve.
Read the papers. Sometimes we are forced to duplicate code or to  
write a lot of delegate methods just because we cannot simply reuse
method dictionary. This is what traits are about.

> I would even suggest that single inheritance doesn't get used that  
> much in practice.  I see an awful lot of C++ where classes are root  
> classes and implement a singleton object.  I see poly-morphism used  
> a lot, but not much inheritance.  I also see STL used a lot to get  
> common syntax container objects, that you get with the standard  
> Smalltalk Collection hierarchy anyway.
>
> So I guess I don't see what Traits gets us that we can't already do  
> in Squeak with some judicious use of proxies, DNU and separate  
> "behavior only" and "state only" classes using accessors for all  
> instance variable access.  Is the real benefit in having tools that  
> formalize this and make it easy?
>
> Is Traits implemented by just pointing a class's method dictionary  
> entries to the approprate seemingly class-less compiled method  
> defined in a Trait?
>
> I guess I don't fundamentally oppose including Traits in mainstream  
> Squeak, as long as it's still possible to ignore it and it doesn't  
> cause a decrease in performance for commonly used objects (i.e. the  
> Collection hierarchy).  From what I've read in the whitepapers, it  
> seems it should be safe and easy to ignore, so the only question I  
> guess would be performance.
>
> And lastly I will just say that as others (Andreas) have pointed  
> out, maximising code reuse is not always desirable.  I can see the  
> argument in favor of code re-use to propagate common behavior  
> without having to find every duplicated variation, but there is  
> also the other side of the argument where a single bug in a common,  
> highly reused method can cause a lot of things to break that might  
> otherwise work properly.
>
>                 -Dean
>
>




More information about the Squeak-dev mailing list