On Apr 11, 2019, at 1:44 PM, Brian Goetz <[email protected]> wrote:
> 
> To me, getting fancy here sounds like borrowing trouble; it seems much 
> simpler -- and perfectly reasonable -- to reject cycles at both compile and 
> runtime, and let users use `V?` in the place they want to break their cycles. 
>  (Assuming we're comfortable with `V?` means not flattened, which is the 
> choice we're also making for specialization.)

For the record, I share Brian's take here.

Also, FTR, I'm comfortable saying V? means not flattened.

I'll go further than that:  I'd be *uncomfortable* if the
meaning of V? diverged (unnecessarily) from the meaning
of mentioning an equivalent non-inline class V2.  That
means V?, if translated to a descriptor, should translate
to a simple legacy-style L-descriptor.

IOW, I think V? is most useful if it means "behaves exactly
like a legacy variable", which means not only "nullable"
but also "not eagerly loaded".  At the VM level, V? should
be the way to avoid bridging to old L-descriptors (without
any "L*" decoration).

IOW again, the contract of V?, at least at the JVM level, should
be exactly fulfillable by the L-V descriptor (without any extra
signal).

— John

Reply via email to