[jsr294-modularity-eg] 294 EG conf call, 2009-04-08

Alex Buckley Alex.Buckley at Sun.COM
Wed Apr 22 12:37:59 EDT 2009


Roman Elizarov wrote:
> AB> Finding module-info is easy when each package becomes a module,
> AB> but that's not the common case. The common case is multiple
> AB> packages joining a module.
> 
> I belive that the most common case is the opposite -- a single package
> will become a module in the majority of cases, since most libraries
> are simple.

The common case is compiling a single module, containing one or many 
packages:

src/classes/module-info.java   ***NEW***
            /com/foo/bar/Quux.java
            ... and rest of module

If module-info isn't "shallow" (i.e. in the root), then it has to go 
deep, but how deep? I showed that complex package hierarchies cause the 
location of module-info to become difficult to determine, unless you 
have module membership is needed in source. That is not going to happen, 
so deep module-info doesn't work. Making it shallow, in the root, is 
good for clarity anyway.

Compiling multiple modules together needs a different directory 
structure, end of story. (Again, without module membership in source, 
deep module-info's are unworkable.)

> AB> As for module names, we don't know how they will be structured.
> AB> Linux distros cope quite well with short names (+versions) for
> AB> rpm/deb files.
> 
> They do. But I belive that this is a bad naming practice and should be
> discouraged. We don't need yet another names space and naming
> convention for modules. When I use a library, why do I have to
> remember an additional piece of information (its module name) in
> addition to its package name? When we are talking about "language
> modules" we (language designers) should impose or suggest the naming
> convention to the users of that language. If we don't know how they
> will be structured, then we probably should not make it a language
> feature. Leave it out of the language and stick with deployment-only
> modules, then.

Language-only modules (used for accessibility but not visibility) don't 
get rid of JAR hell.

Deployment-only modules (used for visibility but not accessibility) 
don't provide proper encapsulation.

294 aims to sit in the middle, and the ongoing EG discussions help to 
determine where precisely the middle is.

No doubt there will be suggested conventions for module names. But while 
the package name convention was present at the dawn of time and so is 
universally followed, a module name convention is likely to enjoy weaker 
support. As you say, there's just too much code out there already in a 
pseudo-modular structure, and I want 294 to work with it.

> AB> A non-answer is "module membership in A.java and B.java", since
> AB> the EG has clearly expressed its opposition to that. Another
> AB> non-answer is "a command-line switch", since that means only one
> AB> module at a time can be compiled.
> 
> What is the problem with "package declares module membership in its
> package-info" approach?

Module membership in package-info.java/class was a shorthand for module 
membership in normal source files. Normal classfiles were going to 
remember their module membership, that's what the EG didn't like. Are 
you proposing ONLY package-info.java/class contain module membership? In 
fact, don't tell me an idea - I hear lots of those already. Write 
something up in detail.

Alex


More information about the jsr294-modularity-observer mailing list