Latest Thinking
Rémi Forax
forax at univ-mlv.fr
Tue Jun 22 15:33:53 PDT 2010
Le 22/06/2010 23:29, John Rose a écrit :
> On Jun 22, 2010, at 2:25 PM, Rémi Forax wrote:
>
>
>> There is another possible design.
>> Allow users to create fake types like java.dyn.Invokedynamic
>> and define the annotation on that type.
>>
> I'd rather not let the magic signature polymorphism escape beyond the current set of names (InvokeDynamic and two methods of MethodHandle). It pulls an "innocent" name into a dark corner of the language.
>
As you said before, the use cases are weaving, AOP or interceptor,
basically a way to specify a protocol.
virtual method is such kind of protocol, in Java or in C#, you don't
specify it
at each call sites. In Java, this is enable by default, in C# you add
an annotation (the override keyword) at callee site.
If you specify a protocol only a each call sites, you don't offer
one common place to document that protocol.
> Also, putting an optional annotation on each call site is more flexible.
>
perhaps but I think it doesn't fit with the use cases. In general, you
will have few
bootstrap methods, each one corresponding to a specific protocol.
And you will have lot of more call sites using these few protocols.
Encoding BSM at each callsite means a lot of information duplication.
And we all know that kind of boilerplate code is error prone.
Remember that currently, you specify the BSM name using a String !
Another to say the same thing, I don't see how to do refactoring
of the corresponding all callsites if the name of one BSM change.
> I wish we had expression annotations...
>
> -- John
>
Rémi
More information about the mlvm-dev
mailing list