<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>