LW1 and ValueTypes consistency

Brian Goetz brian.goetz at oracle.com
Fri Jun 1 20:14:18 UTC 2018


To add to the LW1 open issues: how we express constructors.  The current 
model (exposing a __WithField primitive) is adequate for early adopters 
but will be a distraction (people are simply unable to understand the 
notion that this is not the permanent model we're proposing.)  I'd like 
to scope out the costs of exposing a more traditional constructor idiom.

On 5/30/2018 1:41 PM, Karen Kinnear wrote:
> Details for LW1:
>
> Goals of LW1:
>     Support Early Access Binaries ASAP
>     Support immutable, identity-free value types that are subtypes of java.lang.Object
>
> Limitations:
>     No support for value classes as type parameters for generics (enforced by javac)
>     No migration of value-based classes
>
> In order to deliver this as quickly as possible, we want to decouple the agreed-upon proposals from
> the currently open issues.
>
> Specifically, we are decoupling adding the ValueTypes attribute for consistently identifying known value types from
> the discussion of how we deal with nullability, which allows us to make significant progress and narrows the open design issues.
> This email details this initial step. We have done detailed exploration of eager loading requirements.
>
> =======
> I. Support for ValueTypes attribute and value type consistency
>
> Javac:
>     ValueTypes Attribute identifies value types known at compile time
>
> Verifier:
>      Ensure specific bytecodes operate on match of value type vs. not: (withfield, defaultvalue vs. new, monitor*)
>
>   Runtime:
>      Ensure consistency between assumptions of a type being a value type and the actual type’s expectations when loaded.
>
> Thanks to Frederic: improvement on consistency guarantees for being a Value Type.
> Checks for consistency will be performed and throw ICCE on mismatches between ValueTypes attribute and actual loaded class is_value_type.
>
> Clarification of terms:
>    “preloading” means loading before completion of loading for the declaring class. This is only used for flattenable fields.
>    “link-time loading” means loading during the link phase for the declaring class, which is used for all other uses of entries in the ValueTypes attribute.
>
> 1. *1 Flattenable fields:
>      preload value types used for local flattenable field descriptors listed in the ValueTypes attribute
> 2. Local methods:
>      load value types in method descriptors (parameters/return) at link time, prior to preparation
> 3. constant pool resolution:
>      all constant pool resolution will ensure value type consistency
> 4. References to constant pool descriptors: field and method descriptors
>      at resolution of target field and method descriptors, for all parameters/return, ensure value type consistency
>
> Interpreter:
>     specific bytecodes change behavior based on dynamic checks for is_value_type
>
> JIT:
>     specific bytecodes change behavior based on dynamic checks for is_value_type
>
> Open design issues for LW1
>    1. flattenable statics:
> http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2018-May/000699.html
>
>    2. nullability handling for LW1.
>   I will send follow-up email exploring trade-offs.
>
> thanks,
> Karen
>
>
>
>     
>     
>      
>
>
>
>



More information about the valhalla-spec-observers mailing list