Inline Record
Srikanth
srikanth.adayapalam at oracle.com
Sat May 9 00:58:15 UTC 2020
Thanks for these reports. I should mention that the combination of
records + inlines has seen zero testing - has not even been in the
reckoning for testing as of now. Nevertheless reports are welcome.
Srikanth
On 09/05/20 1:36 am, forax at univ-mlv.fr wrote:
> yes,
> an inline should use Object.equals and Object.hashCode.
>
> There is still an issue with the reference projection vs java.lang.Record.
> An inline record can not insert a ref projection because
> java.lang.Record as to be the sole super type.
>
> With the current compiler, this code compiles
> inline record RecordPoint(int x, int y) {
> public boolean equals(Object o) {
> return this == o;
> }
> public int hashCode() {
> return System.identityHashCode(this);
> }
> public String toString() {
> return "Point";
> }
> }
>
> but there is a class format error on the ref projection
> java.lang.ClassFormatError: Record attribute in non-final or abstract
> class file fr/umlv/valuetype/RecordPoint$ref
>
> Rémi
>
> ------------------------------------------------------------------------
>
> *De: *"Brian Goetz" <brian.goetz at oracle.com>
> *À: *"John Rose" <john.r.rose at oracle.com>
> *Cc: *"Remi Forax" <forax at univ-mlv.fr>, "Srikanth"
> <srikanth.adayapalam at oracle.com>, "amber-dev"
> <amber-dev at openjdk.java.net>
> *Envoyé: *Jeudi 7 Mai 2020 15:47:07
> *Objet: *Re: Inline Record
>
> The implementation in Object is
>
> public boolean equals(Object obj) {
> return (this == obj);
> }
>
>
> This _already_ has exactly the default semantics we want for both
> inlines and identities. Records layer their implementation atop
> it, regardless of inline-ness.
>
>
> On 5/6/2020 7:11 PM, John Rose wrote:
>
> On May 6, 2020, at 3:42 PM, Brian Goetz
> <brian.goetz at oracle.com <mailto:brian.goetz at oracle.com>> wrote:
>
>
> Eventually, inline classes will inherit eq/hashCode from
> Object.
>
>
> Crazy half-baked idea of the moment:
>
> Factor the equals/hashCode/toString methods for records into
> static methods (in ju.Objects) which are configurable
> appropriately,
> and have a default configuration. Use ClassValue for performance.
>
> Then define equals/hashCode/toString in jl.Object (yes, Object)
> to call those methods, *when the receiver is a Record and/or
> an inline*.
>
> Two ideas here: 1. No per-class indy or BSM at all, but a
> ClassValue
> instead. (We should do this for Record anyway.) 2. Push the
> specification
> all the way up to Object. (2 makes more sense for inlines
> than for
> Record, since it’s natural to define equals/hashCode/toString in
> the class hierarchy, if there’s a place to put it. There
> isn’t for inlines.)
>
> — John
>
>
>
More information about the amber-dev
mailing list