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