Ruby 1.9.0 のリリースおめでとうございます!
無事に1.9.0がリリースされたようで大変に目出たいことです。時々 svn up しながら眺めていましたが、ここ数日はとにかくもの凄い勢いで色々なものがcommitされていてびっくりしました(謎のgorubyとか)。皆様お疲れ様でした。
ところで先程 ruby-core に M. Edward (Ed) Borasky さんが投稿して下さったベンチマーク結果が流れておりました。
- ruby-core:14421 Ruby 1.9.0-0 benchmarks
この結果は大変に興味深いのですが、メールそのままのだととっても見辛いので、簡単に整形して比率を加えたものを以下に表にしておきます。Ruby1.9.0に興味津々な皆様是非ともご覧下さいませ。なおベンチマークの条件や内容などはここには書きませんのでメール本文の方をご確認下さい。
項目名 | ruby 1.8.6 (2007-12-03) | ruby 1.9.0 (2007-12-25 revision 14709) | 比率(1.8.6/1.9.0) |
---|---|---|---|
app_answer | 1.53625392913818 | 0.13400411605835 | 11.46 |
app_erb | 2.23458099365234 | 1.57998299598694 | 1.41 |
app_factorial | 0.694716215133667 | 0.444912910461426 | 1.56 |
app_fib | 11.3680670261383 | 1.44150710105896 | 7.89 |
app_mandelbrot | 3.61981320381165 | 0.93461799621582 | 3.87 |
app_pentomino | 183.978760957718 | 39.9713780879974 | 4.6 |
app_raise | 1.69808006286621 | 1.68952989578247 | 1.01 |
app_strconcat | 1.57846403121948 | 0.996259927749634 | 1.58 |
app_tak | 14.9776599407196 | 2.18618512153625 | 6.85 |
app_tarai | 12.5582439899445 | 1.79245805740356 | 7.01 |
app_uri | 4.96692991256714 | 1.98099994659424 | 2.51 |
io_file_create | 0.550206899642944 | 0.566741943359375 | 0.97 |
io_file_read | 0.72334885597229 | 0.519173860549927 | 1.39 |
io_file_write | 0.356566905975342 | 0.262768983840942 | 1.36 |
loop_generator | 56.5723481178284 | 1.11044692993164 | 50.95 |
loop_times | 11.2022171020508 | 2.43959283828735 | 4.59 |
loop_whileloop | 13.0046269893646 | 1.45603704452515 | 8.93 |
loop_whileloop2 | 2.50535702705383 | 0.320430040359497 | 7.82 |
so_ackermann | 26.2885670661926 | 1.85544490814209 | 14.17 |
so_array | 11.4453599452972 | 2.67545294761658 | 4.28 |
so_binary_trees | 4.30503797531128 | 1.36704993247986 | 3.15 |
so_concatenate | 3.91674900054932 | 0.882771968841553 | 4.44 |
so_count_words | 0.490777969360352 | 3.55722904205322 | 0.14 |
so_exception | 3.67201900482178 | 2.55055713653564 | 1.44 |
so_fannkuch | 84.7616000175476 | 51.860946893692 | 1.63 |
so_fasta | 19.389740228653 | 5.67655801773071 | 3.42 |
so_k_nucleotide | 8.10035991668701 | 4.2192759513855 | 1.92 |
so_lists | 1.59231996536255 | 0.659258842468262 | 2.42 |
so_mandelbrot | 42.8019068241119 | 16.2084069252014 | 2.64 |
so_matrix | 3.27859997749329 | 0.793742179870605 | 4.13 |
so_meteor_contest | 52.2575500011444 | 20.0999820232391 | 2.6 |
so_nbody | 28.3777990341187 | 11.6796798706055 | 2.43 |
so_nested_loop | 11.4682841300964 | 2.29553294181824 | 5.0 |
so_nsieve | 27.8629460334778 | 6.61286902427673 | 4.21 |
so_nsieve_bits | 74.7709109783173 | 8.90028190612793 | 8.4 |
so_object | 8.86674499511719 | 1.98283505439758 | 4.47 |
so_partial_sums | 32.7498679161072 | 12.1965389251709 | 2.69 |
so_pidigits | 2.41420793533325 | 2.80991005897522 | 0.86 |
so_random | 2.96923208236694 | 0.729001045227051 | 4.07 |
so_reverse_complement | 4.14339995384216 | 4.04299592971802 | 1.02 |
so_sieve | 0.849525928497314 | 0.187962055206299 | 4.52 |
so_spectralnorm | 41.4432969093323 | 12.4843308925629 | 3.32 |
vm1_block | 47.5090911388397 | 5.34108591079712 | 8.9 |
vm1_const | 23.1181719303131 | 2.43142795562744 | 9.51 |
vm1_ensure | 37.892012834549 | 1.93873500823975 | 19.54 |
vm1_ivar | 21.4678978919983 | 3.85475015640259 | 5.57 |
vm1_ivar_set | 21.2300369739532 | 4.83743500709534 | 4.39 |
vm1_length | 24.722156047821 | 3.72566795349121 | 6.64 |
vm1_neq | 20.6118760108948 | 3.06124901771545 | 6.73 |
vm1_not | 16.1265139579773 | 2.3499960899353 | 6.86 |
vm1_rescue | 24.3832228183746 | 1.55430102348328 | 15.69 |
vm1_simplereturn | 39.7903399467468 | 3.70241904258728 | 10.75 |
vm1_swap | 25.7141978740692 | 2.88358116149902 | 8.92 |
vm2_array | 7.03480696678162 | 2.76925206184387 | 2.54 |
vm2_case | 5.43204402923584 | 0.715604066848755 | 7.59 |
vm2_eval | 17.8432769775391 | 46.1212179660797 | 0.39 |
vm2_method | 28.2497239112854 | 4.29976391792297 | 6.57 |
vm2_mutex | 10.6425650119781 | 2.34252882003784 | 4.54 |
vm2_poly_method | 33.5412700176239 | 4.6308810710907 | 7.24 |
vm2_poly_method_ov | 5.7778160572052 | 0.930914878845215 | 6.21 |
vm2_proc | 10.2587428092957 | 1.44363212585449 | 7.11 |
vm2_regexp | 5.10241913795471 | 2.87602686882019 | 1.77 |
vm2_send | 7.12156820297241 | 0.859764099121094 | 8.28 |
vm2_super | 9.18226003646851 | 1.45039200782776 | 6.33 |
vm2_unif1 | 6.42444896697998 | 0.910121917724609 | 7.06 |
vm2_zsuper | 9.9683849811554 | 1.4930579662323 | 6.68 |
vm3_thread_create_join | 1.16788816452026 | 3.24958300590515 | 0.36 |
vm3_thread_mutex | 163.582499027252 | 9.55388998985291 | 17.12 |
なお、ruby 1.8.6 よりも 1.9.0 の方が結果の悪いもの(比率が1以下)は
- io_file_create (0.97)
- so_count_words (0.14)
- so_pidigits (0.86)
- vm2_eval (0.39)
- vm3_thread_create_join (0.36)
の五つです。io_file_create, so_pidigits はまぁ誤差のようなものとして、so_count_words はなぜこんなに悪いんでしょう? vm2_eval は、そんなに eval 繰り返すヤツが悪い、で片付くとして、vm3_thread_create_join はちょこっと遅いみたいですね。でも mutex の方が早くなっているから良いのかも。
一方すごく速くなっているもの(比率5以上)は以下の29項目です。
- app_answer (11.46)
- app_fib (7.89)
- app_tak (6.85)
- app_tarai (7.01)
- loop_generator (50.95)
- loop_whileloop (8.93)
- loop_whileloop2 (7.82)
- so_ackermann (14.17)
- so_nsieve_bits (8.4)
- vm1_block (8.9)
- vm1_const (9.51)
- vm1_ensure (19.54)
- vm1_ivar (5.57)
- vm1_length (6.64)
- vm1_neq (6.73)
- vm1_not (6.86)
- vm1_rescue (15.69)
- vm1_simplereturn (10.75)
- vm1_swap (8.92)
- vm2_case (7.59)
- vm2_method (6.57)
- vm2_poly_method (7.24)
- vm2_poly_method_ov (6.21)
- vm2_proc (7.11)
- vm2_send (8.28)
- vm2_super (6.33)
- vm2_unif1 (7.06)
- vm2_zsuper (6.68)
- vm3_thread_mutex (17.12)
項目名だけからでも、一応どんな部分が良くなったのか、ちょっとは推測できそうな感じですね。ループ系が速いのは微妙に気持ち良い感じかも知れません。
とにかく噂通り全体的に速くなっているようです。素晴しいことだと思います。