Updated JEP: nestmates

Brian Goetz brian.goetz at oracle.com
Thu Apr 13 22:12:34 UTC 2017

I was trying to make the model simpler to reason about.  My mathematical 
model is that nests form a partition over classes, meaning:
  - every class belongs to a nest
  - no two nests have any members in common
  - every nest has a canonical member

We can't rely on javac (or other compilers) to always generate "nest of 
one" attributes, so the VM would have to, on seeing a class with no nest 
attributes, set "nestTop = me".  But I think that would be the only 
change in the implementation?  And then nestTop(C) becomes a total 
function, which simplifies things.

I'm fine if the spec says this; in fact, I like it.

On 4/13/2017 5:57 PM, David Holmes wrote:
> On 14/04/2017 7:50 AM, Brian Goetz wrote:
>>> The second part most certainly is necessary as a nest-top does not
>>> itself have a nest-top!
>> I would think we'd consider a nest-top as its own nest-top. That way,
>> every nest has a top, which acts as a canonical element for that nest.
> From an implementation perspective certainly that simplifies 
> nest-membership checks. but do you want that in the spec? Do you want 
> javac to generate a self-referential MemberOfNest attribute? If you 
> want this then the definitions need a rewrite. This is not where we 
> are today.
>>> It is not an optimization! You are either a nest-top (and so have a
>>> NestMembers attribute) or you are a nested type and so have a
>>> MemberOfNest attribute. (Of course you can be neither.)
>> Similarly, I'd think that every class that has neither a NestMembers or
>> MemberOfNest attribute constitutes a nest of one.
> Sure logically you can consider it that way. Not sure it has any real 
> affect on anything.
>> Taken together, now:
>>  - Every class belongs to exactly one nest;
>>  - Every nest has a canonical, consistent nest-top (every member of the
>> nest agrees on the nest top)
> Yes.
>> This will become relevant when we extend this to support
>> Lookup.defineClass with a private lookup, which has the effect of
>> injecting a new class into an existing nest.  If every class is already
>> in a nest, this injection is simplified.
> I don't really see how it makes a difference, but you presumably have 
> something in mind here.
> Thanks,
> David

More information about the valhalla-dev mailing list