JEP name

I don't know how permanent JEP names are supposed to be, but I'd prefer a different name at this 
point. Something like: "Expanded JVM Access to Private Members"—shorter, focused on the 
feature itself rather than its relationship to the Java language. Or maybe "Class Nests for 
Access to Private Members".

I like the latter; it captures the core feature here, which is introducing a new concentric sphere of access control in the VM, which we call "nests". That it was inspired by translation challenges in Java, or useful to addressing those, is secondary.

Terminology

The term "nest" is nice because it's short and mostly unspoiled by overloading in this 
context (I think?); it's not great because it's informal and doesn't mean anything the first time 
you hear it. I thought about something more clinical like "access control context", but 
I'm not convinced that's an improvement. How do others feel?

Nest connotes "things in other things", like Matryoshka dolls, which I think is a positive.


The JEP uses "nest top" to describe the class that nest members reference; I prefer "host class", 
which better describes the class's role and isn't tied to the Java "top level class" concept. I know we use 
"host class" internally in Hotspot, perhaps when working with anonymous classes (of the JVM flavor), but I 
think in that context it will ultimately mean the same thing? Are we comfortable repurposing the term in this way?

Or: "nest host" or "nest host class" or "nest parent" ...

The primary purpose of having a nest top is so that there is a well-defined canonical member of each nest, to which we can attach all the nest metadata and ensure that computations regarding nest-ness are well-defined. It doesn't have to be the "top" class at the language level. I think the term should connote canonical-ness rather than top-ness.

I follow Brian's model when it comes to nest membership (5.4.4): every class 
belongs to a nest, possibly (in the absence of MemberOfNest) the nest hosted by 
itself. Many nests are singletons without any associated explicit attributes.

More precisely: nests form a /partition/ over classes. This means every class belongs to exactly one nest, so the function Nest(Class) is total.

Compiler changes

The JEP text can't seem to decide if compiler changes are part of it, or a 
follow-up exercise. I think we're best off explicitly including the compiler 
changes, which will provide opportunities for design validation and testing.

That was my bad. I was trying to capture that we didn't require an immediate flag day -- that for any given compiler, dropping access bridges out of the compiler implementation could happen any time after the VM acquired nestmate support -- but for our own implementation, we'd be silly to not get the test and validation benefit of dropping unnecessary bridge generation ASAP.

API changes

We need to decide whether we are delivering a reflection component, and if so, what that looks like.

Minimal candidate:

    class Nest {
        Class<?> hostClass() { ... }
        boolean isMember(Class<?> clazz) { .... }
    }

    class Class {
       Nest getNest() { ... }
    }



Reply via email to