Remi,
IMHO, if you go down the storage modifier model, you have to let go of the idea of annotating local parameters, and stick to fields and arrays (e.g. "true" containers).

This means that some of the "sharp" info would be lost on the way, and we would always use nullable representation on the stack.

It's a trade off, of course - the programming model has less types, we lose ability for type information to flow from generic clients to containers and we also lose some ability to fully flatten on the stack (in the sense that a null side-channel will always need to be there, e.g. in the form of another synthetic parameter).

Maurizio

On 27/07/2022 01:02, [email protected] wrote:


------------------------------------------------------------------------

    *From: *"daniel smith" <[email protected]>
    *To: *"Remi Forax" <[email protected]>
    *Cc: *"valhalla-spec-experts" <[email protected]>
    *Sent: *Wednesday, July 27, 2022 12:20:01 AM
    *Subject: *Re: The storage hint model

        On Jul 20, 2022, at 9:44 AM, Remi Forax <[email protected]> wrote:

        And not having .ref and .val to be types greatly simplify the
        model, because they is no interaction between the type
        checking and the storage hints, those are two separated concerns.


    To emphasize this point: I think we're talking about years of
    development time that could be cut from this project if we could
    live with storage modifiers rather than needing to thread the
    flattening information through the type system. Not to mention the
    downstream simplification for all the developers that don't have
    to learn what a value type is.

    (Think about it: no Q types, no .val/.ref, no boxing, no universal
    generics, no new unchecked warnings, no secondary reflection
    mirrors, no new descriptors, no bridges. Just a storage modifier
    akin to 'volatile', support for that modifier in arrays, and value
    classes able to opt in to allow that modifier.)

    But there are details to sort out, and those details will
    determine whether this simplifying move is a fantasy or a viable
    alternative design.


No bridges but you still need the Preload attribute.

The main drawback is that the storage hints are not available when you have an abstract method, so you have to fallback to the idea that any type (type variables included) is nullable when calling a virtual method (apart if the type has already been loaded). Maybe the cost can be simulated by patching javac to never generates a Q-type (apart from anewarray and fields) and generate a Preload attribute instead.

Rémi

Reply via email to