"Model 2" prototype status
forax at univ-mlv.fr
Sun Aug 2 19:52:16 UTC 2015
Le 1 août 2015 23:48:07 CEST, Brian Goetz <brian.goetz at oracle.com> a écrit :
>> I dislike the Foo<ref> / Foo<any> thing for several reasons.
>Not surprising. This wasn't our first choice either.
>We spent a great deal of effort investigating whether it was possible
>re-use Foo<?> to mean Foo<ref> when the corresponding tvar is a ref
>tvar, and to mean Foo<any> when the corresponding tvar is an any tvar.
>Seems obvious, right?
It's not what i propose.
Foo<any> is Foo<any>.
Foo<ref> is Foo<?> because if Foo<?> is used in a 1.10 class file it's a reified type and if Foo<?> is used in a 1.9 class the compiler considers that is not reified and disallow to cast by example a Foo<any> to a Foo<?>. Practically, in that case, a user can use something similar to a checked collection that will check at runtime that each value have the right class.
>Several hundred hours later, the short answer is that things fall apart
>when a library is any-fied and the client is not recompiled; this would
>make any-fication a binary-incompatible change, which would be a loser.
> So with tears in our eyes, we reluctantly concluded that we needed to
>differentiate between Foo<ref> and Foo<any>. Once we swallowed that
>pill, many things snapped into place. So as sad as it is to have two
>kinds of wildcard, I'm pretty sure its the right call.
I understand the need of differenciating between Foo<ref> and Foo<?> but i hope that instead of having to explain that to each Java dev, we can explain that only to the few that will stumble on the issue.
>You prefer another syntax? Sure, I'm sure there are alternatives. We
>can talk about it -- but not this year! We have way more important
>things to work out before that comes anywhere near the top of the list.
I don't care about the syntax but the one you propose doesn't help IMO.
>As to bounds... we're still working out the details of the interaction
>between value types and interfaces. So its quite possible that Foo<any
>T extends Comparable> may in fact be meaningful. (And if that's the
>case, primitives might join the party too.) Or not, we're not sure
yes, forget the interfaces,
i suppose that it's not a big deal to not try to support them until you want to introduce value types in a later release :(
More information about the valhalla-dev