Valhalla EG notes April 10, 2019

John Rose john.r.rose at
Thu Apr 18 21:43:55 UTC 2019

On Apr 11, 2019, at 1:44 PM, Brian Goetz <brian.goetz at> 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

— John

More information about the valhalla-spec-observers mailing list