<div dir="ltr">This API seems tricky again... I don't wish to see patterns like:<div><br></div><div>cs.getChars(begin, end, dest, 0);</div><div>if (charSequence.getClass().getModule() != Object.class.getModule()) {</div><div>    dest = dest.clone();</div><div>}</div><div><br></div><div>to ensure the safety of the copy.</div><div><br></div><div>Also in this pattern, the dest array is often a shared cache array; sharing such a cache array to arbitrary charsequence implementations is almost always inherently unsafe, and this makes destBegin argument pointless as such a call pollutes the whole dest array.</div><div><br></div><div>Regards,</div><div>Chen Liang</div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Sun, Feb 9, 2025 at 12:50 PM Markus KARG <<a href="mailto:markus@headcrashing.eu">markus@headcrashing.eu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

  
    
  
  <div>
    <p>As recently announced, kindly inviting everybody to contribute /
      review / comment on <a href="https://github.com/openjdk/jdk/pull/21730" target="_blank">https://github.com/openjdk/jdk/pull/21730</a>.
      Thank you!</p>
    <p>-Markus Karg</p>
    <p><br>
    </p>
    <div>Am 09.02.2025 um 19:34 schrieb Markus
      KARG:<br>
    </div>
    <blockquote type="cite">
      
      <p>Thank you, everybody. As no more comments arrived in the past
        eight weeks, I assume that there is implicit agreement with my
        latest arguments (see below), so next I will provide a PR to
        continue discussion with real Java code at hand.</p>
      <p>-Markus</p>
      <p><br>
      </p>
      <div>Am 01.12.2024 um 19:23 schrieb Markus
        Karg:<br>
      </div>
      <blockquote type="cite">
        
        
        
        <div>
          <p class="MsoNormal"><span style="color:rgb(31,73,125)">As
              Thanksgiving is over, and as work towards 24-RDP1 should
              mostly be done, I think it is a good time to resume our
              now.<u></u><u></u></span></p>
          <p class="MsoNormal"><span style="color:rgb(31,73,125)"><u></u> <u></u></span></p>
          <p class="MsoNormal"><span style="color:rgb(31,73,125)">To kick-off,
              below I am repeating my last response to Chen. Kindly
              asking everybody to chime in, so we can find a feasible
              and beneficial conclusion in this area.<u></u><u></u></span></p>
          <p class="MsoNormal"><span style="color:rgb(31,73,125)"><u></u> <u></u></span></p>
          <p class="MsoNormal"><span style="color:rgb(31,73,125)">-Markus<u></u><u></u></span></p>
          <p class="MsoNormal"><span style="color:rgb(31,73,125)"><u></u> <u></u></span></p>
          <p class="MsoNormal"><a name="m_9183757728320509009__MailEndCompose"><span style="color:rgb(31,73,125)"><u></u> <u></u></span></a></p>
          <div>
            <div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(181,196,223);padding:3pt 0cm 0cm">
              <p class="MsoNormal"><b><span style="font-size:10pt;font-family:Tahoma,"sans-serif"">Von:</span></b><span style="font-size:10pt;font-family:Tahoma,"sans-serif"">
                  Markus Karg [<a href="mailto:markus@headcrashing.eu" target="_blank">mailto:markus@headcrashing.eu</a>]
                  <br>
                  <b>Gesendet:</b> Sonntag, 27. Oktober 2024 09:44<br>
                  <b>An:</b> 'core-libs-dev'<br>
                  <b>Betreff:</b> Request for Comments: Adding bulk-read
                  method "CharSequence.getChars(int srcBegin, int
                  srcEnd, char[] dst, int dstBegin)"<u></u><u></u></span></p>
            </div>
          </div>
          <p class="MsoNormal"><u></u> <u></u></p>
          <p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">>Hi
              Markus,<u></u><u></u></span></p>
          <p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">>Should
              we drop the srcBigin/srcEnd parameters, as they can be
              replaced by a subSequence(srcBegin, srcEnd) call?<u></u><u></u></span></p>
          <p class="MsoNormal"><span style="font-size:12pt;font-family:"Times New Roman","serif"">Chen,
              I do understand your idea and while originally I had the
              same in mind (it really <i>is</i> appealing!), I came up
              with a draft using the <b>original</b> </span><span style="font-size:10pt;font-family:"Courier New"">String.getChars()</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
              signature instead, due to the following drawbacks:<u></u><u></u></span></p>
          <ul type="disc">
            <li class="MsoNormal"><span style="font-size:12pt;font-family:"Times New Roman","serif"">There
                might exist (possibly lotsof) </span><span style="font-size:10pt;font-family:"Courier New"">CharSequence.getChars(int,
                int, char[], int)</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
                implementations already, as this problem (and the idea
                how to solve it) is anything but new. At least such
                implementations are </span><span style="font-size:10pt;font-family:"Courier New"">String</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">,
              </span><span style="font-size:10pt;font-family:"Courier New"">StringBuilder</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
                and </span><span style="font-size:10pt;font-family:"Courier New"">StringBuffer</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">.
                If we come up with a different signature, then <b>none</b>
                of these already existing performance boosters will get
                used by </span><span style="font-size:10pt;font-family:"Courier New"">Reader.of(CharSequence)</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
                automatically - at least until they come up with alias
                methods. Effectively this leads to (possibly lots) of
                alias methods. At least it leads to alias methods in </span><span style="font-size:10pt;font-family:"Courier New"">String</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">,
              </span><span style="font-size:10pt;font-family:"Courier New"">StringBuilder</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">,
              </span><span style="font-size:10pt;font-family:"Courier New"">StringBuffer</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
                and </span><span style="font-size:10pt;font-family:"Courier New"">CharBuffer</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">.
                In contrast, when keeping the signature copied from </span><span style="font-size:10pt;font-family:"Courier New"">String.getChars</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">,
                chances are good that (possibly lots of) implementations
                will <i>instantly</i> be supported by </span><span style="font-size:10pt;font-family:"Courier New"">Reader.of(CharSequence)</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
                without alias methods. At least, </span><span style="font-size:10pt;font-family:"Courier New"">String</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">,
              </span><span style="font-size:10pt;font-family:"Courier New"">StringBuilder</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
                and </span><span style="font-size:10pt;font-family:"Courier New"">StringBuffer</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
                will be.<u></u><u></u></span></li>
            <li class="MsoNormal"><span style="font-size:12pt;font-family:"Times New Roman","serif"">Since
                decades people are now very used to </span><span style="font-size:10pt;font-family:"Courier New"">StringBuilder.getChars(int,
                int, char[], int)</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">,
                so (possibly a lot of) people might simply <i>expect</i>
                us to come up with that lengthy signature. These people
                might be rather confused (if not to say frustrated) when
                we now force them to write an intermediate </span><span style="font-size:10pt;font-family:"Courier New"">subSequence(int,
                int)</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
                for something that was "such simple" before.<u></u><u></u></span></li>
            <li class="MsoNormal"><span style="font-size:12pt;font-family:"Times New Roman","serif"">Custom
                implementations of </span><span style="font-size:10pt;font-family:"Courier New"">CharSequence.subSequence</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
                could come up with the (performance-wise "bad") idea of
                creating <b>copies</b> instead of views. At least it
                seems like </span><span style="font-size:10pt;font-family:"Courier New"">AbstractStringBuilder</span><span style="font-size:12pt;font-family:"Times New Roman","serif"">
                is doing that, so chances are "good" that custom libs
                will do that, too. For example, because they need it for
                safety. Or possibly, because they have a technical
                reason that <i>enforces</i> a copy. That would
                (possibly massively, depending on the actual class)
                spoil the idea of performance-boosting this RFC is all
                about.<u></u><u></u></span></li>
          </ul>
          <p class="MsoNormal"><span style="color:rgb(31,73,125)">-Markus<u></u><u></u></span></p>
        </div>
      </blockquote>
    </blockquote>
  </div>

</blockquote></div>