Charles Oliver Nutter wrote:
Thomas E Enebo wrote:
7. java name with ? if boolean
8. ruby name with ? if boolean
7 and 8 do not seem right to me...
So I think in misinterpreted some code added in the last release to
support ? forms of properties. The code appeared to try to add such
names for all boolean methods, but I believe the intention was to only
add it for property names. I'm going to boot 7 and 8.
Actually it seems that the code we have at present *does* append a ? to
any boolean-returning methods. So for example, in the JI spec fixture
BeanLikeInterfaceHandler, the boolean friendly() method can be called as
friendly?. If that feature stays (and it probably should since it was
shipped with 1.1.3), I think you also should be able to implement
friendly? for a boolean friendly() interface method. Yes?
I keep thinking there is a more complex way of doing this which will
end up being a single search. Like canonicalizing method name then
doing a single lookup.
...
This essentially eliminates dynamic dispatch entirely when calling into
Ruby through a Java interface. But there's that initial hit to look up
the methods. Now we could actively search for those methods when the
class is created and pre-populate the fields, but I'm not doing that
right now.
In order to do what you're saying, we would want to search only for the
canonicalized name, and for all method_added always update that
canonicalized name. For example, the canon name could be the original
Java method name; so when you define my_foo= it would also redefine
setMyFoo.
Ok, it also occurred to me why this isn't quite so simple. The lookup
done for each method needs to be there in the first place because we
defer creating the Java-based interface impl until the class is first
constructed. We also don't add the method_added hook until that point,
because there's no Java class yet for it to update. So at the time the
8x lookup needs to happen, it's very possible there's only one of those
styles there.
So basically we need to do the search for all 8 styles at least once per
method. That search could happen at first call, likely never happening
again since the method_added hook will keep it updated. Or that search
could happen at class creation time, with up to 8 lookups per each
interface method being implemented. Either way, you're paying the cost.
One thing I did fix on trunk is that the search wasn't actually ordered
1 thru 8 because I was stuffing the names into a HashSet during class
creation. That is now a LinkedHashSet, so the order is predictable.
I'm open for other ideas on the search issue too. But I'm skeptical as
to whether it's going to be a real hit. It will only ever happen once
per method per new interface impl class.
- Charlie
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email