<html><body><div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000"><div><br></div><div><br></div><hr id="zwchr" data-marker="__DIVIDER__"><div data-marker="__HEADERS__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>De: </b>"Brian Goetz" <brian.goetz@oracle.com><br><b>À: </b>"Remi Forax" <forax@univ-mlv.fr><br><b>Cc: </b>"amber-spec-experts" <amber-spec-experts@openjdk.java.net><br><b>Envoyé: </b>Jeudi 9 Janvier 2020 16:07:50<br><b>Objet: </b>Re: [records] Record updates for Preview/2<br></blockquote></div><div data-marker="__QUOTED_TEXT__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><br>
<blockquote cite="mid:345654259.17331.1578531020214.JavaMail.zimbra@u-pem.fr">
<div style="font-family: arial, helvetica, sans-serif; font-size:
12pt; color: #000000">
<div>
<div style="font-family: arial, helvetica, sans-serif;
font-size: 12pt; color: #000000">
<div>- @Deprecated on record components<br>
</div>
</div>
</div>
</div>
</blockquote>
<br>
Please outline what you think we want on a separate thread?<br>
<br>
<blockquote cite="mid:345654259.17331.1578531020214.JavaMail.zimbra@u-pem.fr">
<div style="font-family: arial, helvetica, sans-serif; font-size:
12pt; color: #000000">
<div>
<div style="font-family: arial, helvetica, sans-serif;
font-size: 12pt; color: #000000">
<div>- change the bootstrap method protocol (a little bit)<br>
</div>
</div>
</div>
</div>
</blockquote>
Let's start a thread on this too. <br>
<blockquote cite="mid:345654259.17331.1578531020214.JavaMail.zimbra@u-pem.fr">
<div style="font-family: arial, helvetica, sans-serif; font-size:
12pt; color: #000000">
<div>
<div style="font-family: arial, helvetica, sans-serif;
font-size: 12pt; color: #000000">
<div> - equals/hashCode implementation are currently
slooooow<br>
</div>
</div>
</div>
</div>
</blockquote>
Can you qualify/quantify "slow"? </blockquote><div><br></div><div>sure !</div><div>toString is very very very slow, equals can be a little bit faster, hashCode has no issue.<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>Using this benchmark [1]:</div><div>Benchmark Mode Cnt Score Error Units
<br>ObjectMethodsBenchMark.equals_class avgt 5 67.953 ± 0.145 ns/op
<br>ObjectMethodsBenchMark.equals_record avgt 5 70.654 ± 0.154 ns/op
<br>ObjectMethodsBenchMark.hashCode_class avgt 5 2.741 ± 0.002 ns/op
<br>ObjectMethodsBenchMark.hashCode_record avgt 5 2.288 ± 0.002 ns/op
<br>ObjectMethodsBenchMark.toString_class avgt 5 20.381 ± 0.066 ns/op
<br>ObjectMethodsBenchMark.toString_record avgt 5 713.522 ± 14.290 ns/op
<br></div><div><br data-mce-bogus="1"></div><div>- toString currently uses String.format() so it's dog slow.<br></div><div> Wiring the bootstrap method to use the StringConcatFactory will fix the issue.</div><div><br data-mce-bogus="1"></div><div>- equals doesn't test primitive first so it's just a little bit slower that if I write it by hand<br data-mce-bogus="1"></div><div> So it's not slow compared to any code generated by an IDE or things like Lombock but it can be faster. <br data-mce-bogus="1"></div><div> Sorting the record components to have the 32 bits primitive types tested first (so create the corresponding guardWithTest last) is the usual trick.<br data-mce-bogus="1"></div><div> </div><div>Rémi<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>[1] <a href="https://github.com/forax/amber-record/blob/master/src/test/java/fr.umlv.record/fr/umlv/record/ObjectMethodsBenchMark.java">https://github.com/forax/amber-record/blob/master/src/test/java/fr.umlv.record/fr/umlv/record/ObjectMethodsBenchMark.java</a>]<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div></div></div></body></html>