[External] : Re: Declared patterns -- translation and reflection
forax at univ-mlv.fr
forax at univ-mlv.fr
Wed Mar 30 09:50:42 UTC 2022
> From: "Brian Goetz" <brian.goetz at oracle.com>
> To: "Remi Forax" <forax at univ-mlv.fr>
> Cc: "amber-spec-experts" <amber-spec-experts at openjdk.java.net>
> Sent: Wednesday, March 30, 2022 2:42:38 AM
> Subject: Re: [External] : Re: Declared patterns -- translation and reflection
>> 1/ conceptually there is a mismatch, the syntax introduce names for the
>> bindings, but they have no names at that point, bindings only have names AFTER
>> the pattern matching succeed.
> I think you have missed the point here. The names serve the implementation of
> the pattern, not the interface -- just as parameter names to methods do. As you
> see in the example, these are effectively blank final locals in the body of the
> pattern, which must be assigned to. (I'd have pointed this out if this were
> actually a message on declaring deconstructors, but since the message is on
> translation and reflection I didn't want to digress.)
>> 2/ sending the value of the binding by name is alien to Java. In Java, sending
>> values is by the position of the value.
> It's not by name. I don't know where you got this idea.
>> 3/ the conceptual mismatch also exists at runtime, you need to permute the value
>> of bindings before creating the carrier because a carrier takes the value of
>> the binding by position while the code will takes the value of the bindings by
>> name (you need the equivalent of MethodHandles.permuteArguments() otherwise you
>> will see the re-organisation of the code if they are side effects).
> It's not by name. I don't know where you got this idea.
I think i understand the underlying semantics of the syntax, i'm not 100% confident.
You know that it's not about the syntax per se but what the syntax try to communicate to the users.
The problem with the proposed syntax is that you invent a new kind of variable, until now, we had local variables and fields (and array cells but those have no name).
Your binding is a new kind of variable. It means that
- as a user, i need to learn new rules: can i use the value of a binding to compute the value of another one, can i declare a binding final ? can i capture a binding in a lambda/anonymous class ? etc
- the JLS needs to artificially grows to cover all these rules
- the JVMS needs to be updated, more questions: do we need an attribute LocalBindingTable like we have a LocalVariableTable
- tools needs to be updated: how debuggers reflects bindings, is it another tables in the UI ? Do/Can the debugger allows to chain the value of the binding while a user steps into the code, etc
All this pain, because you want to name bindings.
Rémi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20220330/6a588c8b/attachment-0001.htm>
More information about the amber-spec-experts
mailing list