Paving the on-ramp

Brian Goetz brian.goetz at oracle.com
Wed Oct 19 18:54:44 UTC 2022


>
>     We could, of course, prevent class access from outside the class
>     too, effectively making such classes visible only to the
>     launcher.  But this would come at no small cost to prevent such
>     accesses, and for limited benefit. 
>
>
> We can cheaply disallow access by
> - only allowing one compilation unit if there is an unnamed class.
> - mark the generated class as synthetic (see JVMS 4.7.8) so it does 
> not work with separate compilation.

Yes, but this has several disadvantages.

  - More complicated translation schemes mean more speed bumps merging 
onto the highway;
  - It is a more limited programming model, users can't even use records 
unless they are local.

>     The status-quo proposal currently says: the name of the class is
>     not visible from within the class, you can't have constructors or
>     instance initializers, you get an implicit no-arg constructor like
>     every other constructor-less class.  If you want a more complex
>     construction protocol, or supertypes, or class declaration
>     annotations, or to live in a package, declare a class.  This still
>     seems pretty OK. 
>
>
> I still think that allowing fields inside an unamed class is a mistake 
> (if we can avoid to talk about null at the beginning, it's a win).

I understand why this is appealing to you, but again, it smacks of 
trying to engineer a "beginner-safe programming model subset", which I 
think is a fool's game here.  The goal is to match the ceremony overhead 
to what the user actually uses.  Requiring a class declaration in order 
to declare a superclass makes sense -- because this is where a class 
declaration adds value -- but "no fields" seems more of a gratuitous, 
paternalistic restriction.  It also restricts the programming model in 
ways that rule out pedagogically useful intermediate refactorings, even 
if they are not a stable endpoint.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-spec-observers/attachments/20221019/3c404c88/attachment.htm>


More information about the amber-spec-observers mailing list