[前][次][番号順一覧][スレッド一覧]

ruby-changes:46771

From: k0kubun <ko1@a...>
Date: Thu, 25 May 2017 20:14:45 +0900 (JST)
Subject: [ruby-changes:46771] k0kubun:r58886 (trunk): string.c: Optimize String#concat when argc is 1

k0kubun	2017-05-25 20:14:40 +0900 (Thu, 25 May 2017)

  New Revision: 58886

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=58886

  Log:
    string.c: Optimize String#concat when argc is 1
    
    Optimize performance regression introduced in r56021.
    
    * Benchmark (i7-4790K @ 4.00GH, x86_64 GNU/Linux)
    
    Benchmark.ips do |x|
      x.report("String#concat (1)") { "a".concat("b") }
      if RUBY_VERSION >= "2.4.0"
        x.report("String#concat (2)") { "a".concat("b", "c") }
      end
    end
    
    * Ruby 2.3
    
    Calculating -------------------------------------
       String#concat (1)      6.003M (?\194?\177 5.2%) i/s -     30.122M in   5.031646s
    
    * Ruby 2.4 (Before this patch)
    
    Calculating -------------------------------------
       String#concat (1)      4.458M (?\194?\177 8.9%) i/s -     22.298M in   5.058084s
       String#concat (2)      3.660M (?\194?\177 5.6%) i/s -     18.314M in   5.020527s
    
    * Ruby 2.4 (After this patch)
    
    Calculating -------------------------------------
       String#concat (1)      6.448M (?\194?\177 5.2%) i/s -     32.215M in   5.010833s
       String#concat (2)      3.633M (?\194?\177 9.0%) i/s -     18.056M in   5.022603s
    
    [fix GH-1631]

  Modified files:
    trunk/string.c
Index: string.c
===================================================================
--- string.c	(revision 58885)
+++ string.c	(revision 58886)
@@ -2935,7 +2935,9 @@ rb_str_concat_multi(int argc, VALUE *arg https://github.com/ruby/ruby/blob/trunk/string.c#L2935
 {
     str_modifiable(str);
 
-    if (argc > 0) {
+    if (argc == 1) {
+	return rb_str_concat(str, argv[0]);
+    } else if (argc > 1) {
 	int i;
 	VALUE arg_str = rb_str_tmp_new(0);
 	rb_enc_copy(arg_str, str);

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]