[jsr294-modularity-eg] 294 EG conf call, 2009-02-25

Alex Buckley Alex.Buckley at Sun.COM
Thu Feb 26 18:53:17 EST 2009


// EG members, feel free to add/edit points I haven't noted correctly.


* Attendees

Alex Buckley, Sam Pullara, Bryan Atsatt, Richard Hall, Michal Cierniak, 
BJ Hargrave, Peter Kriens, Daniel Leuck, Doug Lea


* Issue tracking

While the EG continues to discuss requirements [1], the spec lead feels 
that crystallizing phone and mailing list discussions into bug/issue 
lists in JIRA or Bugzilla is not helpful. As discussions firm up, the 
spec lead committed to a public wiki to list agreed requirements and the 
resulting design decisions.

Bug reports against 294's Reference Implementation should be filed as 
per the OpenJDK policy at https://bugs.openjdk.java.net/


* Peter's nested modules proposal

Peter's idea is that a "container" is the authoritative conferrer of 
module membership. That is, module membership should be inferred only 
from module-info.java, and that membership in package-info.java (or 
individual source files) should be dropped.

(This is somewhat at odds with the previous week's discussion which 
found "General support for module membership in package-info.java, and 
in the main for module membership in individual source files." and 
"General support for ... having the compiler get module membership for B 
from a package-info file, which may or may not live in the same 
directory tree as B.")

Peter's idea is further that only module-info.class would have a Module 
attribute giving module membership. Normal classfiles would have 
membership determined at compile-time based on their nearest enclosing 
module-info.java/class, and at runtime based on a module system calling 
defineClass(..., moduleID).

A benefit of keeping the Module attribute out of normal classfiles is 
that such classfiles were only ever going to contain module name and not 
version. The question arises of whether module-private access control 
should care about versions at compile-time. Comments welcome.

Where two types in the same package need to belong to different modules, 
it is necessary to use arrange code into different containers. That is, 
the source tree would be arranged with multiple roots, each with a 
module-info.java/class to offer module membership.

General support for the container idea overall. However, some support 
for the view that "operational approaches" (e.g. "compiler walks up the 
directory hierarchy until it finds a file called...") are flawed; issues 
with completeness and breadth-first/depth-first ordering.

Desirability of a nesting relationship between containers is an open 
question. Comments welcome.

It follows that annotations should be allowed on the module declaration 
in a container's module-info.java/class file.

Requirements 1-5 of [1] have all now received at least some discussion.


* Dependencies in source code

Peter's proposal envisioned module-info.java/class as containing a 
module name only, without version or dependency information. Requirement 
6 of [1] is that dependencies are expressible in source. This 
requirement comes from the idea that developers know and should document 
their own code's dependencies, notwithstanding BJ's comments in [2] 
about the distinction between app provider and app assembler.

A lively discussion followed on the idea that a module's identity - name 
and version - and its dependencies (other module identities) could be 
expressed in source without committing the language to a particular 
module system, version scheme, or dependency type (package v. module).

Some support for the feasibility of keeping versions (and perhaps names) 
"opaque" in the language (requirement 13) and having them interpreted by 
a module system (e.g. a build system or module library at compile-time 
and a module-aware classloader at runtime).

The spec lead reaffirmed that the Jigsaw module system in JDK7 will not 
be part of the Java SE 7 Platform, and that reference compiler and VM 
will access a module system through a java.* API defined by this EG. 
Prototyping is currently based on a simple draft API at [3].

Some support for the view that multiple module systems are inherently of 
no interest to the developer, and that where they do exist, it might be 
possible to define a subset of version/dependency concepts.


* Face-to-face meeting at EclipseCon in March

Monday 23 March, 12pm-evening, at Sun's Santa Clara campus.
Large room + breakout room reserved. LAN+wifi available.


* Next meeting

Wednesday 4 March. 10am US West, 1pm US East, 7pm France.

- Continue discussion of opaque dependencies in source.
- Discuss BJ's points about what features properly belong in the 
language v. a module system.


Alex

[1]http://altair.cs.oswego.edu/pipermail/jsr294-modularity-observer/2009-January/000002.html
[2]http://altair.cs.oswego.edu/pipermail/jsr294-modularity-observer/2009-February/000073.html
[3]http://openjdk.java.net/projects/jigsaw/doc/api.html
_______________________________________________
jsr294-modularity-eg mailing list
jsr294-modularity-eg at cs.oswego.edu
http://cs.oswego.edu/mailman/listinfo/jsr294-modularity-eg


More information about the jsr294-modularity-observer mailing list