I've added some comments to the document and thought I'd try something
different.  Rather than copy/paste context here, I've opened a github
pull request against the repo so the context of the changes / comments
are directly inline.
https://github.com/openjdk/valhalla-docs/pull/1

Trying this but if there's a preference to have it be on list, I can
recreate the comments here.

--Dan

On Mon, May 3, 2021 at 6:33 PM Dan Smith <daniel.sm...@oracle.com> wrote:
>
>
> > On May 3, 2021, at 4:21 PM, Brian Goetz <brian.go...@oracle.com> wrote:
> >
> >
> >>> 2.  Whether abstract classes are primitive superclass candidates.  The 
> >>> static compiler will check this at compilation time when it sees a 
> >>> superclass of a primitive class, but the JVM will want to recheck anyway. 
> >>>  There are two sensible ways to handle this in the classfile:
> >>>
> >>>  - An attribute that says "I am a primitive superclass candidate."  The 
> >>> static compiler puts it there, and the JVM         checks it.
> >>>  - Infer and tag.  If an abstract class is loaded that is not a primitive 
> >>> superclass candidate, the JVM injects IdentityObject as a superinterface 
> >>> of the newly loaded class; when we go to load a primitive subclass, this 
> >>> will fail because primitive classes cannot implement both IdentityObject 
> >>> and PrimitiveObject.
> >>>
> >>> Reflection probably doesn't have to reflect whether a class is primitive 
> >>> superclass candidate; it already reflects the things needed to make this 
> >>> determination.
> >> This one, on the other hand, conveys a core property of a JVM class.
> >
> > John's notes in the SotV suggests that the JVM is comfortable just 
> > "figuring it out" and not requiring an attribute.  So this is the "infer 
> > and tag" option; the VM infers this at runtime.  Not clear if there is a 
> > value to having the static compiler capture something that wasn't explicit 
> > in the source and that has to be validated at runtime anyway.
>
> Ha, I was just looking over this! (See email.)
>
> SotV still has an opt-in. It just describes it as a ACC_ABSTRACT flag on an 
> <init> method, rather than a class attribute or something else. (It also 
> describes some additional requirements, like no instance fields, but I argued 
> in the other email that those requirements are better handled as consistency 
> checks, not separate components to the opt-in.)
>

Reply via email to