> From: "Brian Goetz" <brian.go...@oracle.com>
> To: "Dan Heidinga" <heidi...@redhat.com>
> Cc: "Kevin Bourrillion" <kev...@google.com>, "valhalla-spec-experts"
> <valhalla-spec-experts@openjdk.java.net>
> Sent: Monday, April 25, 2022 8:26:02 PM
> Subject: Re: [External] Foo / Foo.ref is a backward default; should be 
> Foo.val /
> Foo

>>> What I’m thinking here about migration is that existing APIs can say 
>>> “Optional”
>>> but field declarations can say Optional.val, getting additional footprint /
>>> flattening benefits, without perturbing the APIs (and with cheap 
>>> conversions.)

>> Aren't most of the migration cases (at least for existing VBC)
>> targeting B2? They need to keep the reference semantics due to
>> existing code using null and will still get optimized inside a
>> compiled body.

> Sort of. For existing uses, we’re stuck with compatibility with the L 
> protocol,
> certainly. But consider this example:

> class Foo {
> private Optional<Foo> f;

> public Optional<Foo> f() { return f; }
> }

> The API point has to stay LOptional, but the field could migrate further to
> QOptional, and there’s definitely value in that. With the current stake in the
> ground, we have no way to get there, but with Kevin’s proposal, we have the
> option to go further.

This seems very specific to Optional, for Optional storing null is always a 
mistake, but that's not true for other VBC, by example a deadline can be typed 
as an Instant with null meaning no deadline. 

Rémi 

Reply via email to