You keep saying “what we need”. But really, what I think you mean is “what the scheme I have in mind needs.” Can we try and separate these out? I don’t think any of these are *needed*, but maybe you want to make the argument that you have a better scheme in mind, and we should choose that scheme, and therefore then we might need them.
> On Mar 8, 2022, at 10:04 AM, Remi Forax <fo...@univ-mlv.fr> wrote: > > Hi Jim, > I believe that there is a mismatch about what is needed for the pattern > matching and the API you propose. > The Carrier API allows to map one tuple of types to one storage > representation based on ints, longs and references. > > But what we need is to have several shapes for the same storage, mapping is > not one to one but many to one, more like how unions are mapped in C. > For a switch, if we have several cases, each one need it's own shape to store > the bindings but at the same time we also need one field to be the same for > all shapes (the field of type int indicating which case match) so one storage > but many shapes. > > Rémi > > ----- Original Message ----- >> From: "Jim Laskey" <jlas...@openjdk.java.net> >> To: "core-libs-dev" <core-libs-dev@openjdk.java.net> >> Sent: Tuesday, March 8, 2022 3:11:39 PM >> Subject: RFR: JDK-8282798 java.lang.runtime.Carrier > >> We propose to provide a runtime anonymous carrier class object generator; >> java.lang.runtime.Carrier. This generator class is designed to share >> anonymous >> classes when shapes are similar. For example, if several clients require >> objects containing two integer fields, then Carrier will ensure that each >> client generates carrier objects using the same underlying anonymous class. >> >> See JBS for details. >> >> ------------- >> >> Commit messages: >> - Introduce java.lang.runtime.Carrier >> >> Changes: https://git.openjdk.java.net/jdk/pull/7744/files >> Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=7744&range=00 >> Issue: https://bugs.openjdk.java.net/browse/JDK-8282798 >> Stats: 1085 lines in 2 files changed: 1085 ins; 0 del; 0 mod >> Patch: https://git.openjdk.java.net/jdk/pull/7744.diff >> Fetch: git fetch https://git.openjdk.java.net/jdk pull/7744/head:pull/7744 >> >> PR: https://git.openjdk.java.net/jdk/pull/7744