Pattern Matching for instanceof (Preview 2)

forax at univ-mlv.fr forax at univ-mlv.fr
Fri Feb 28 11:50:29 UTC 2020


> De: "Gavin Bierman" <gavin.bierman at oracle.com>
> À: "Remi Forax" <forax at univ-mlv.fr>
> Cc: "jan lahoda" <jan.lahoda at oracle.com>, "amber-spec-experts"
> <amber-spec-experts at openjdk.java.net>
> Envoyé: Mardi 18 Février 2020 16:16:40
> Objet: Re: Pattern Matching for instanceof (Preview 2)

>> On 18 Feb 2020, at 15:04, [ mailto:forax at univ-mlv.fr | forax at univ-mlv.fr ]
>> wrote:

>> Hi Gavin,

>> ----- Mail original -----

>>> De: "Gavin Bierman" < [ mailto:gavin.bierman at oracle.com |
>>> gavin.bierman at oracle.com ] >
>>> À: "Remi Forax" < [ mailto:forax at univ-mlv.fr | forax at univ-mlv.fr ] >
>>> Cc: "jan lahoda" < [ mailto:jan.lahoda at oracle.com | jan.lahoda at oracle.com ] >,
>>> "amber-spec-experts" < [ mailto:amber-spec-experts at openjdk.java.net |
>>> amber-spec-experts at openjdk.java.net ] >
>>> Envoyé: Mardi 18 Février 2020 15:32:12
>>> Objet: Re: Pattern Matching for instanceof (Preview 2)

>>> [Just circling back to this, as I added a note about the grammar to the JEP
>>> page…]

>>>> On 6 Feb 2020, at 20:38, Remi Forax < [ mailto:forax at univ-mlv.fr |
>>>> forax at univ-mlv.fr ] > wrote:

>>>> [moved to amber-spec]

>>>> ----- Mail original -----

>>>>> De: "jan lahoda" < [ mailto:jan.lahoda at oracle.com | jan.lahoda at oracle.com ] >
>>>>> À: "amber-dev" < [ mailto:amber-dev at openjdk.java.net |
>>>>> amber-dev at openjdk.java.net ] >
>>>>> Envoyé: Jeudi 6 Février 2020 21:18:52
>>>>> Objet: Pattern Matching for instanceof (Preview 2)

>>>>> Hi,

>>>>> Thanks to Gavin, Brian and Alex, there is a new draft JEP for Pattern
>>>>> Matching for instanceof (Preview 2):
>>>>> [ https://bugs.openjdk.java.net/browse/JDK-8235186 |
>>>>> https://bugs.openjdk.java.net/browse/JDK-8235186 ]

>>>>> Any feedback on the JEP is more than welcome!

>>>>> Thanks,
>>>>> Jan

>>>> so the difference with the previous preview is that deconstruction is added.

>>> That is correct.

>>>> I see two questions:
>>>> - the grammar allows to mix var and non-var for a given reference type, i think
>>>> that should only permitted if the non var is a deconstruction itself ?

>>> I don’t know what you mean here. There are two patterns, a type test pattern and
>>> a deconstruction pattern. In v2 we propose to support deconstruction patterns
>>> over record types *only*. A deconstruction pattern looks like this: Point(var
>>> a, var b), i.e. all the components are either (recursively) deconstruction
>>> patterns, or `var` <identifier>, i.e. with no type needed. I added a note to
>>> the JEP page pointing out that this is a starting point, and eventually we will
>>> support other patterns in the argument position, specifically <type>
>>> <identifier>; hopefully in this release.

>> Currently we don't support mixing var and non var in lambda parameters.
>> So my question is: does this pattern Point(var x, int y) that mix a 'var' and an
>> explicit type allowed or not ?

> Aha. So, we’re not at that stage yet - this isn’t allowed by the spec as it
> stands. This - and many other issues - is why I’m starting small…

> Do you have a preference?

I don't think it's a matter of preference, 
we want to support things like 
Rectangle(var p1, Point(var x, var y)) 

For the type pattern Rectangle(...), there is a mix between var and non var, no ? 

> Gavin

Rémi 


More information about the amber-spec-observers mailing list