Hi Daniel,
On 04/30/2011 09:51 AM, Daniel Latrémolière wrote:
I suggest a syntax for InvokeDynamic.
Why ?
motivations ?
It is created like a field and has a name (for referencing and
bootstrapping it), then i suggest to create a new modifier "dynamic"
and define InvokeDynamic like a mix of field and constructor with his
bootstrap code included in it, like this:
|{public|protected||private} {static||*dynamic*} {final||volatile}
$name*(MethodHandles.Lookup caller, MethodType type)* {
// code creating MethodHandle "value" variable.
*target* value;
}|
You can see the three following differences with a field:
* A new modifier ("dynamic") usable in the same places than
current "static" modifier. All others modifiers are like a
standard field.
* The field has arguments like a constructor with his execution
context. The two arguments of the bootstrap/constructor are fixed.
* In this type of dynamic field constructor, the normal (without
exception) end of code is "target" instruction.
The bootstrap method return a MethodHandle, because the type of
CallSite is not used given the others modifiers of the field definition:
* final => ConstantCallSite
* "nothing" => MutableCallSite
* volatile => VolatileCallSite
Given this syntax, there is no need (except for reflection) of
exposing CallSite and using a bootstrap method (no name wasted for
referencing another bootstrap method).
You forget an important part of the design, developers can subclass a
CallSite (actually one of the 3 subclasses).
Also, the name use for the bootstrap method can be forged by the code
generator,
by example: 'ruby:call' is a valid invokedynamic name that encodes a
kind of namespace in it.
For the eye of developer, this will visibly be a dynamic field with a
constructor, then reasonably corresponds to InvokeDynamic features.
Opinions?
Daniel.
NB: It is not special in Java to have different content in a code
following context: a constructor allow instructions like "this(...)",
or "super(...)", contrary to a standard method, then "target"
instruction at the end of code will not be really alien.
Rémi
--
Daniel Latrémolière
Mail: daniel.latremoli...@gmail.com <mailto:daniel.latremoli...@gmail.com>
//
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev