[squeak-dev] Re: ANN: NanoTraits v0.5

Andreas Raab andreas.raab at gmx.de
Tue Dec 22 11:15:41 UTC 2009

Igor Stasenko wrote:
> 2009/12/22 Andreas Raab <andreas.raab at gmx.de>:
> And how to determine that
> SomeClass>>methodA
> is actually
> SomeTrait>>methodB
> which in own turn
> SomeOtherTrait>>methodC
> ?

Easy. In v0.6 (attached) we now retain a reference to the original 
compiled method instead of just the original home. Using the original 
trait method you can find out things like:

method := SomeClass>>#methodA.
method originalTraitMethod => CompiledMethod(SomeTrait>>methodB).
method originalTraitMethod originalTraitMethod => 
method originalTraitMethod originalTraitMethod originalTraitMethod => nil

etc. Obviously, the methodHome the same for all of them.

>> - Some previously invalid trait composition are now valid, in particular T -
>> {#x} - {#y} (meaning T- {#x. #y}) as well as T @ {#x->#y} @ (#a -> #b}
>> (meaning T @ { #x -> #y. #a -> #b}.
> T1 - T2?

Left as an exercise for the reader :-) Seriously, it's straightforward: 
First, implement #includesSelector: and #selectorsAndMethodsDo: in 
TraitExclusion so that it works with traits in addition to symbols in 
the list of exclusions. Next, implement #addTraitUser: and 
#removeTraitUser: in TraitExclusion so that it looks for additional 
traits inside the exclusions. Done. That's all. Four methods.

> My primary concern with traits, is lack of system change notification support.
> We need them in deltastreams.

What kind of support is missing? In NanoTraits, almost all of this stuff 
is absolutely trivial because the entire implementation is deliberately 
simple and trying to fit in the existing class kernel.

Some more things new in v0.6:
- We no longer use a method property for the method home since this 
shows in decompiles. Instead we use NanoTraitMethodState (subclass of 
AddlMethodState) which keeps a reference to the original compiled method.
- Support for Monticello. v0.6 is compatible with Berne traits when 
using Monticello.
- Various fixes and a few more isKindOf:'s to avoid interactions with no 
longer used methods

BTW, v0.6 should be considered a release candidate. Unless there are 
bugs that I haven't found yet, I think this version is good to go.

   - Andreas

-------------- next part --------------
A non-text attachment was scrubbed...
Name: NanoTraits-v0.6.zip
Type: application/zip
Size: 26708 bytes
Desc: not available
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20091222/ac0de587/NanoTraits-v0.6.zip

More information about the Squeak-dev mailing list