> From: "Brian Goetz" <brian.go...@oracle.com>
> To: "amber-spec-experts" <amber-spec-experts@openjdk.java.net>
> Sent: Friday, April 15, 2022 10:50:27 PM
> Subject: Evolving past reference type patterns

[...] 

> There are also some small differences between the safe cast conversions and
> method invocation context. There is the same issue with unboxing null (throws
> in (loose) invocation context), and method invocation context makes no attempt
> to do narrowing, even for literals. This last seems mostly a historical wart,
> which now can’t be changed because it would either potentially change (very
> few) overload selection choices, or would require another stage of selection.

It's not an historical wart, it's careful design (or co-design between the 
language and the VM). 
Assignments can be used for fields, that are stored on heap, while method 
arguments can only be stored on stack. 
Values on stack/in registers are either 32 bits or 64 bits while values on the 
heap are multiple of 8 bits. 

That's the same reason why the result of the addition of two shorts is an int 
and why assignment conversions in the context of a computation (the pattern 
matching helps to express computation) feels weird. 

> What are the arguments against this interpretation? They seem to be various
> flavors of “ok, but, do we really need this?” and “yikes, new complexity.”

> The first argument comes from a desire to treat pattern matching as a
> “Coin”-like feature, strictly limiting its scope. (As an example of a similar
> kind of pushback, in the early days, it was asked “but does pattern matching
> have to be an expression, couldn’t we just have an “ifmatch” statement? (See
> answer here: [
> http://mail.openjdk.java.net/pipermail/amber-dev/2018-December/003842.html |
> http://mail.openjdk.java.net/pipermail/amber-dev/2018-December/003842.html ] )
> This is the sort of question we get a lot — there’s a natural tendency to try
> to “scope down” features that seem unfamiliar. But I think it’s
> counterproductive here.

We all know that this is a big feature, don't worry. 

> The second argument is largely a red herring, in that this is not new
> complexity, since these are exactly the rules for successful casts. In fact,
> not doing it might well be perceived as new complexity, since it results in
> more corner cases where refactorings that seem like they should work, do not,
> because of conversions.
> ​

It is new complexity, the rules for primitive narrowing are brand new. 

Can you provides examples of such refactorings ? 

Rémi 

Reply via email to