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
