https://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112017-10-27T14:55:15ZRuby Issue Tracking SystemRuby master - Bug #13773: Improve String#prepend performance if only one argument is givenhttps://redmine.ruby-lang.org/issues/13773?journal_id=676182017-10-27T14:55:15Zwatson1978 (Shizuo Fujita)watson1978@gmail.com
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul><p>Applied in changeset trunk|r60480.</p>
<hr>
<p>string.c: Improve String#prepend performance if only one argument is given</p>
<ul>
<li>
<p>string.c (rb_str_prepend_multi): Prepend the string without generating<br>
temporary String object if only one argument is given.<br>
This is very similar with <a href="https://github.com/ruby/ruby/pull/1634" class="external">https://github.com/ruby/ruby/pull/1634</a></p>
<p>String#prepend -> 47.5 % up</p>
<p>[Fix GH-1670] <a href="/issues/13773">[ruby-core:82195]</a> [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Improve String#prepend performance if only one argument is given (Closed)" href="https://redmine.ruby-lang.org/issues/13773">#13773</a>]</p>
</li>
<li>
<p>Before<br>
String#prepend 1.517M (± 1.8%) i/s - 7.614M in 5.019819s</p>
</li>
<li>
<p>After<br>
String#prepend 2.236M (± 3.4%) i/s - 11.234M in 5.029716s</p>
</li>
<li>
<p>Test code<br>
require 'benchmark/ips'</p>
</li>
</ul>
<p>Benchmark.ips do |x|<br>
x.report "String#prepend" do |loop|<br>
loop.times { "!".prepend("hello") }<br>
end<br>
end</p>