Hi folks. I was reading the PBE chapter about reflection where it talks a
little about Method Wrappers. Then, I took a look at TestCoverage
implementation.

After that, I took a look at
http://www.squeaksource.com/ObjectsAsMethodsWrap

The main difference between both approaches are:

TestCoverage
- Just extends from ProtoObject, implement doesNotUnderstand:   ,  run:
aSelector with: anArray in: aReceiver    , etc
- To install and uninstall the wrappers uses methodDictionary  at: xxx  put:
yyy
- Just for test coverage.

ObjectAsMethodWrapper
- Is more generic, support pre and post closures, and you can subclass and
create you own wrapper
- To install and uninstall the wrappers it uses Class >> addSelector: self
selector withMethod: self

So...what I did ?? I created a TestCoverage but creating a subclass of
ObjectAsMethodWrapper called TestCoverageMethodWrapper  which just
implements a 1 or 2 methods. I mean, I reused the generic
ObjectAsMethodWrapper.  It seems to work ok.

I did some test running TestCoverage with both implementation and it seems
mine (TestCoverageMethodWrapper) is 30% much slower than the original.
Trying to understand why, I think it is because the original one uses just
methodDictionary  at: xxx  put: yyy
but mine uses Class >> addSelector: self selector withMethod: self.
In this last method, there are all the notifications, add to
localSelectors...etc

Now...I have two questions:

1) For a generic approach to method wrappers, which of those two ways would
you use ?   should I care about notifying, adding to localSelectors, etc?
Or at is just temporal, I don't care ?
which are the pros and cons you see with each alternative ?

2) Do you think it make sense to the package  ObjectsAsMethodsWrap  in
PharoCore as a "library" to create lightweight proxies ? It is just 4
classes and it would be cool to change TestCoverage to that implementation.
Then, you only don't have the library, but also some real examples. Of
course, this can be done if we eleiminate the 30% of slowleness.


so...what do you think ?

Cheers

Mariano
_______________________________________________
Pharo-project mailing list
Pharo-project@lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to