[squeak-dev] Issue with traits

Igor Stasenko siguctua at gmail.com
Wed Oct 21 06:22:38 UTC 2009


Create a trait:

Trait named: #ABBA
	uses: {}
	category: 'ABBA'.

- add a method #foo to ABBA trait

Then create 2 classes which using it:

Object subclass: #ABBAB
	uses: ABBA
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'ABBA'.

Object subclass: #ABBAC
	uses: ABBA
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'ABBA'.


now what i found interesting:

(ABBAB methodDict at: #foo) == (ABBAC methodDict at: #foo)

but as side effect, we got this one:

(ABBAB methodDict at: #foo) methodClass  ==> ABBAC

which i find a bit disturbing :(

I'm not sure if given issue could have a major impact somewhere...
But i would just #clone the trait method before installing it..
Yes, it takes more space, but it makes each of such methods unrelated.

And i strongly assume that these methods should be unrelated, and
moreover, recompiled for each class separately, because
global var in one class could be a class var in another one, so a
trait method, like:

foo
  ^ Bar

will behave depending on class environment.


-- 
Best regards,
Igor Stasenko AKA sig.



More information about the Squeak-dev mailing list