<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>From: </b>"Brian Goetz" <brian.goetz@oracle.com><br><b>To: </b>"Per-Ake Minborg" <per-ake.minborg@oracle.com>, "Remi Forax" <forax@univ-mlv.fr>, "Maurizio Cimadamore" <maurizio.cimadamore@oracle.com><br><b>Cc: </b>"leyden-dev" <leyden-dev@openjdk.org>, "John Rose" <john.r.rose@oracle.com><br><b>Sent: </b>Friday, July 28, 2023 5:06:07 PM<br><b>Subject: </b>Re: Draft JEP Announcement: "Computed Constants"<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>
    <br>
    <blockquote cite="mid:DM6PR10MB4283917B333E342C4930C620DA06A@DM6PR10MB4283.namprd10.prod.outlook.com">
      <div style="font-family: Calibri, Arial, Helvetica, sans-serif;
        font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
        I share your view that it is important to be able to use
        ComputedConstant "early" in the VM startup sequence. There is
        nothing inherent to the proposed API that *requires* a lambda or
        a method reference to be used. An anonymous or regular class,
        implementing Supplier would also do. Also, there is nothing
        fundamental that prevents us from *implementing* the API in a
        way it can be used "early".<br>
        <br>
        We do not add any keywords, the JEP is a pure library approach
        so, I do not foresee any backward compatibility issues.</div>
    </blockquote>
    <br>
    Allow me to translate ...<br>
    <br>
    Remi was assuming a goal.  The problem is that he didn't state that
    goal, or his assumption that this was a goal, before jumping to
    criticizing your proposal.  As a result, his criticism was unclear,
    and IMO misplaced.  <br>
    <br>
    The hidden goal that Remi was assuming is that "it should be
    possible to migrate existing code that uses static final fields to
    use computed constants in a source- and binary-compatible way." 
    Now, it should have been entirely clear from content that this was a
    non-goal of this JEP (you didn't propose a language or VM solution,
    and that was clearly deliberate), and if he wanted to express his
    disappointment, he should have done so more directly, such as "I
    wish there was a way to let old code play in this game."  To which
    the answer would have been "We may get there someday, some day, but
    we're starting with something simpler."</blockquote><div><br></div><div>You are making the assumption that you can not have both, a binary-compatible way of moving things out of the static init block and a solution not based on a keyword.<br data-mce-bogus="1"></div><div>I do not think this is true.<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div>In my opinion, what this JEP got right is to try to tag what can be moved out of a static init block, making the job of a condenser easier.<br><div data-marker="__QUOTED_TEXT__">But this JEP still allows</div><div data-marker="__QUOTED_TEXT__">- any codes to create a ComputedConstant, you can create a ComputedConstant from the content of a HTTP request,<br data-mce-bogus="1"></div><div data-marker="__QUOTED_TEXT__">- a ComputedConstant can be part of the API (public field), so it can not be elided,<br data-mce-bogus="1"></div><div data-marker="__QUOTED_TEXT__">- multiple fields to be initialized by one ComputedConstant.<br data-mce-bogus="1"></div><div data-marker="__QUOTED_TEXT__">All those things are making the implementation of a condenser far harder than it should.<br data-mce-bogus="1"></div><div data-marker="__QUOTED_TEXT__"><br data-mce-bogus="1"></div><div data-marker="__QUOTED_TEXT__">But i'm sure, i'm wrong and there is already a written condenser somewhere that shows that i'm just a naysayer not able to see how simple the ComputedConstant API really is.<br data-mce-bogus="1"></div><div data-marker="__QUOTED_TEXT__"><br data-mce-bogus="1"></div><div data-marker="__QUOTED_TEXT__">RĂ©mi<br data-mce-bogus="1"></div><div data-marker="__QUOTED_TEXT__"><br data-mce-bogus="1"></div></div></div></body></html>