rbenv 版の ruby が rvm 版の ruby よりも遅いという話がある。理由を調べてみると、最適化オプションに違いがある。rvm には -O3
オプションが使われていたのに対して、rbenv では -O2
オプションが使われていた。この最適化オプションの違いが ruby のスピード差になっている。
ruby-build log
ruby-build の git log を見るとこうある。
commit 9f8d53365aef52c940095f583cdc82f02caba90f Author: Erik Michaels-Ober <sferik@gmail.com> Date: Wed May 1 07:38:43 2013 -0700 ruby-build 20130501 commit 2f8dcafb0ec2c5f478e7f45d7eca3a0f0a5ae8c0 Merge: 28b9bcb b219192 Author: Sam Stephenson <sstephenson@gmail.com> Date: Fri Apr 26 16:00:19 2013 -0700 Merge pull request #351 from jeremy/restore-o3-cflags Restore -O3 default when we build with clang commit b219192020b4641e057c9f168089f8488624ec64 Author: Jeremy Kemper <jeremy@bitsweat.net> Date: Fri Apr 26 15:06:43 2013 -0700 Restore -O3 default when we build with clang
2013-04-26 に -O3
オプションが適用されるよう修正が入っている。
rbenv reinstall
rbenv に reinstall サブコマンドはない。ただ、install サブコマンドに --force
オプションを付けると、強制的にもう一度インストールできる。これを使って、ruby を再インストールする:
$ cd ~/build/ruby-build $ git pull $ sudo ./install.sh $ cd ~/.rbenv $ git pull $ cd $ rbenv install --force 2.0.0-p0
あとがき
rbenv で -O3
オプションが適用される様になったことは書いた。ログを見るとコンパイラーが clang の場合に -O3
オプションが使われる様になっている。GNU gcc の場合はどうなのかな? そこまでは調べていない。
rbenv 版ではなく正しく書くなら ruby-build でインストールされた ruby です。
ReplyDeletervm の方も「rvm 版」ではなく「rvm でインストールされた ruby」です。
多少冗長ですが、今の表記だとカスタマイズが入っているように見えてしまうため、正しく書く事をおすすめします
(rvm の方は実際にパッチを当てているケースがあって rvm 版で正しい事もたまにありますが)