Updated JEP: nestmates

David Holmes david.holmes at oracle.com
Fri Apr 14 03:20:49 UTC 2017

On 14/04/2017 8:10 AM, forax at univ-mlv.fr wrote:
> ----- Mail original -----
>> De: "David Holmes" <david.holmes at oracle.com>
>> À: forax at univ-mlv.fr
>> Cc: "Brian Goetz" <brian.goetz at oracle.com>, "John Rose" <john.r.rose at oracle.com>, valhalla-dev at openjdk.java.net
>> Envoyé: Jeudi 13 Avril 2017 23:44:55
>> Objet: Re: Updated JEP: nestmates
>>>> On 13/04/2017 8:37 PM, Remi Forax wrote:
>>>>> Re-reading the spec again,
>>>>> i think it would be clearer if you introduce T the nest-top, and modifying the
>>>>> classloading order has to be listed in the "Risks and Assumptions" section.
>>>>> Description:
>>>>>   "The Java compiler compiles a group of nested types into a corresponding group
>>>>>   of class files; it uses the InnerClasses and EnclosingMethod attributes to
>>>>>   reify the nesting relationship (JVMS 4.7.6 and 4.7.7)."
>>>>>   We can not re-use these attributes to describe nesting relationship because
>>>>>   being part of a nest has to be verified, triggering classloading of the
>>>>>   nest-top, thus changing the semantics of the existing attributes.
>>>>>   ...
>>>>>   "For types C and D to be nestmates they must either have the same nest-top T. A
>>>>>   type C claims to be a member of the nest of D, if both C and D list T in their
>>>>>   MemberOfNest attribute. The membership is validated during class loading if T
>>>>>   also lists C and D in its NestMembers attribute. This may require loading of
>>>>>   nest-top types earlier than might otherwise occur."
>>>> That paragraph in the JEP got modified slightly from my original. There
>>>> was no intent at that point to introduce a third type. My original is:
>>>> "For types <i>C</i> and <i>D</i> to be nestmates they must either have
>>>> the same nest-top, or else one must be the nest-top of the other.
>>> ok, agree with this one, even if the second part of this sentence is not
>>> necessary.
>> The second part most certainly is necessary as a nest-top does not
>> itself have a nest-top!
> Conceptually a nest-top is its own nest-top, but in term of attribute, so yes, you're right.
>>>> A type <i>C</i> claims to be a member of the nest of <i>D</i>, if it
>>>> lists <i>D</i> in it's `MemberOfNest` attribute.
>>> while i understand this sentence, i'm not sure everybody will be able to parse
>>> it,
>>> apart from the 'it's' -> its, "member of the nest of D" is ambiguous, at least
>>> for me, it can be read as "member of the same nest as D" or as "member of the
>>> nest named D".
>>> Perhaps removing the "of" is enough.
>>>   A type <i>C</i> claims to be a member of the nest <i>D</i>, if it lists <i>D</i>
>>>   in it's `MemberOfNest` attribute.
>> D is not a nest! D is a type that may be in a nest. "nest of D" is
>> perfectly correct. We could rephrase to "of the same nest as D".
> if D is not the nest, then MemberOfNest attribute of C is not D but the nest-top of D.

Sorry I did not write what I intended, but I also think you are using 
"nest" to refer to the nest-top ? What I intended to say was

D is not a nest! D is a type that may be the nest-top of C.


> Rémi

More information about the valhalla-dev mailing list