On 4/22/2020 4:15 PM, Dan Smith wrote:
Okay, so it would be valid to talk about "the run-time module of C"
while C is being derived?

I think this sentence from 5.3.6 anticipates this sort of early
query, but I might be misinterpreting the parenthetical:

"We say that a class is in a run-time module iff the class's run-time
package is associated (or will be associated, if the class is
actually created) with that run-time module."

I'm a little nervous about the idea that some associations haven't
happened yet. I'm not clear on the timing.

Yes, it would be valid. The wording of the 5.3.6 sentence is trying to afford a degree of laziness to implementations in how they they make the association between run-time package and run-time module. This is because "run-time package" is a pretty ephemeral concept: before any class is created, does any run-time package exist? Many implementors would say "no" -- and yet, the invocation of ModuleLayer::defineModules has already happened, so e.g. the VM has already associated the run-time module `java.base` with the run-time package `java.lang` of the bootstrap loader, even before the class `Object` is loaded. So, if you have the name of a class, and a loader, you can find out from the VM which run-time module the class has been or will be created as a member of ("in"). The loader narrows down the run-time modules a bit; the package name narrows them down further. The module:loader:package relationships are immutable.

Alex

Reply via email to