> On 5 Oct 2020, at 16:20, Brian Goetz <brian.go...@oracle.com> wrote:
> 
> 
> I have one concern:
> 
>> The second condition eliminates pointless instances of pattern matching 
>> where the expression will always match the pattern. In particular, the null 
>> literal is not compatible with any type test pattern.
> 
> I am not sure I agree with this framing.  We need to separate the semantics 
> of _patterns_ from the semantics of `instanceof`.  A total pattern (var x, 
> Object x, total type pattern) _does_ match null.  We may exclude some 
> patterns from `instanceof`, but that doesn't change their semantics.  I think 
> we should get ahead of this, rather than plan on patching it later.

Yes, I had spotted this. Apologies, I put the error condition in the wrong 
section - in matching rather than in instanceof - although it’s effect right 
now is the same. I shall move it. 


> Even more so:
> 
>> The null reference value does not match any type test pattern.
> 
> According to the discussions surrounding switch, this is not true.  The null 
> reference value matches any type pattern _that is total on the static type of 
> the operand_.  Again, we've got to separate the semantics of the type 
> pattern, from what `instanceof` does with a type pattern.  We get several 
> shots at null before we actually match the pattern: we can eliminate some 
> matches statically at compile time, and we can eliminate others by giving 
> semantics to instanceof before we ask "does it match the pattern."  So we 
> should be careful in which of these three buckets we put our null hostility.

Yes, spotted this also! I have refactored the semantics. In fact, for now we 
don’t need to give a case about null reference value matching, as it is caught 
by the instanceof rules.


> Overall, though, I am super-happy with how this spec has landed.  At the 
> beginning, we we a bit fearful of how intrusive it would be; in the end, 
> there is basically just the obvious set of new sections: pattern syntax, 
> pattern scoping, pattern operational semantics.  That the diffs are almost 
> entirely "adding new sections" looks like winning to me.  Further,         
> looking ahead, adding both new kinds of patterns (e.g., deconstruction 
> patterns) and new places that use patterns (e.g., pattern assignment) will 
> have an obvious place to go.

Thanks. For now section 14.30 looks a little “over-structured”, but it was 
carefully designed to be able to grow gracefully. 

Now this is JEP 394 (yay!), I will build a new version of the spec and put it 
in a more memorable place shortly. I will announce on this list when it is 
available.

Gavin

Reply via email to