[Repost] 3.10 traits inconsistencies

stephane ducasse stephane.ducasse at free.fr
Wed Nov 28 19:51:42 UTC 2007


Hi andreas

sorry I'm too exhausted (I mean it literally -huge headhach) to reply  
today deeply, I had and will have some key deadlines and a house from  
1930 with electricians fixing all the wires (basically changing every  
single wires for our safety) so total mess for a couple of week  
starting....

In a couple of weeks I hope to get back to squeak and I would like to  
fix several little bugs in traits like the one that we found with  
damien during nile.

Adrian master is what you are looking for.
	http://www.iam.unibe.ch/~scg/Archive/Diploma/Lien04a.pdf
and I'm sure that adrian can reply to you .

So thanks for asking and I will try to reply but I will travelling  
again.

Stef

On 28 nov. 07, at 07:17, Andreas Raab wrote:

> Hi -
>
> [Repost from a while ago. I'm still interested in finding out more  
> about these issues - who maintains traits these days?]
>
> I noticed some traits inconsistencies in the latest 3.10 beta. If
> someone could shed a light on those, I'd appreciate it:
>
> * Class definitions with traits:
>
> Class>>subclass: t uses: aTraitCompositionOrArray  
> instanceVariableNames:
> f classVariableNames: d poolDictionaries: s category: cat
>
> says this:
>
>   copyOfOldClass := self copy.
>   newClass := self subclass: t instanceVariableNames: f
> classVariableNames: d poolDictionaries: s category: cat.
>   "..."
>   SystemChangeNotifier uniqueInstance
> 	classDefinitionChangedFrom: copyOfOldClass to: newClass.
>
> This seems wrong because unless I'm missing something the
> "copyOfOldClass" is the superclass of the class being changed and not
> its old representation. This pattern seems to appear in all traits
> subclass creation methods.
>
> * Class traits:
>
> fooTrait := Trait named: #TFooTrait uses:{} category: 'Tests'.
> barTrait := Trait named: #TBarTrait uses:{} category: 'Tests'.
>
> classA := Object subclass: #TestClassA
>   uses: fooTrait
>   instanceVariableNames: ''
>   classVariableNames: ''
>   poolDictionaries: ''
>   category: 'Tests'.
> classA classTrait uses: fooTrait class + barTrait. "works"
>
> classB := Object subclass: #TestClassB
>   uses: fooTrait + barTrait
>   instanceVariableNames: ''
>   classVariableNames: ''
>   poolDictionaries: ''
>   category: 'Tests'.
> classA classTrait uses: fooTrait class + barTrait. "fails"
>
> Why is this? In particular considering that we can transform classA  
> into
> the desired shape via:
>
> classA := Object subclass: #TestClassA
>   uses: fooTrait
>   instanceVariableNames: ''
>   classVariableNames: ''
>   poolDictionaries: ''
>   category: 'Tests'.
> classA classTrait uses: fooTrait class + barTrait. "works"
> classA := Object subclass: #TestClassA
>   uses: fooTrait + barTrait
>   instanceVariableNames: ''
>   classVariableNames: ''
>   poolDictionaries: ''
>   category: 'Tests'.
>
> (note that in the above the obvious desire is to include the  
> methods of
> TFooTrait for both class and metaclass operations). Given that the
> former doesn't work, I think this last example constitutes a bug. But
> more importantly: What the rationale for disallowing the inclusion of
> the same trait on both instance and class side?

normally this should not be a problem to use a traits from class and  
instance side.
At least this was never a limit of the model.

> * Fileouts:
>
> I was trying to file out a bunch of code with traits and found that I
> can't file it in again. I've tried with other code and, for example,
> Nile can't be filed out and back in either (if you need something  
> to try
> it with).

needs to be fixed :(
The code of fileout is so bad I always wanted to rewrite everything.

> Monticello seems to work but at times this is a bit of a
> heavy-weight solution. Any ideas?
>
> Oh, and lastly: Is there any documentation at all about the the
> implementation of the traits kernel? (not the general approach; I'm
> pretty clear on that but rather on the implementation itself) I  
> seem to
> remember having seen references to a thesis maybe but I can't  
> remember.
> Any pointers welcome.
>
> Cheers,
>   - Andreas
>
>
>




More information about the Squeak-dev mailing list