Proposal: #CompileTimeDependences: `requires static`

Stephen Colebourne scolebourne at joda.org
Wed Jun 29 13:34:36 UTC 2016


Thank you for this proposal, which I believe satisfies the necessary semantics.

As others have noted, the words used in the module-info file are not
especially clear and serve to obscure what is going on. I think
perhaps there should be a wider re-evaluation of the keywords.

    module A {
        requires B;
        requires static C;
        requires static public D;
        exports dynamic E;
   }

The basic concept that I see is "A depends on B" so "depends" or
"dependson" would be better than "requires".

    module A {
        depends B;
        depends optionally C;
        depends optionally export D;
        exports runtime E;
    }

or

    module A {
        depends B;
        depends compiletime C;
        depends compiletime export D;
        exports runtime E;
   }

or more radically:

    module A {
        depends B;

       compiletime {
          depends C;
          depends publish D;
       }
       runtime {
          exports E;
      }
   }

FWIW the proposed use of "optional" by a number of people is
consistent with Maven, where "optional" means mandatory at compiletime
and optional therafter.

Stephen


On 29 June 2016 at 00:31,  <mark.reinhold at oracle.com> wrote:
> 2016/6/28 15:50:52 -0700, Remi Forax <forax at univ-mlv.fr>:
>> Apart the fact that 'static' should be spelled 'optional', there is no
>> reason to reuse static as it doesn't convey the semantics we want,
>> i.e. optional at runtime, i fully agree with this proposal.
>
> In this context `static` is intended to mean "at compile time" or,
> equivalently, before the more "dynamic" phases of run time and link
> time (the latter of which is more like run time than compile time).
>
> I agree that `static` is potentially confusing since its meaning here
> is different from what `static` means when used on a member of a class.
>
> It does, however, fit nicely with its (nearly) dual directive, `exports
> dynamic`, proposed for #ReflectiveAccessToNonExportedTypes.
>
> I think `optional` is a non-starter, since `requires optional` reads as
> an oxymoron, and it's optional at run time but mandatory at compile
> time, so in what sense is it, really, "optional"?
>
> Suggestions of other alternatives are welcome ...
>
> - Mark


More information about the jpms-spec-observers mailing list