トップ «前の日記(2009-10-03) 最新 次の日記(2009-10-07)» 編集

Route 477



2009-10-06

[prog] 言語間のおおまかな速度差

「Computer Language Benchmarks Game」を眺めて、各言語のおおまかな速度性能をまとめてみた。

C、C++
---- 1倍の壁 ----
Java
---- 3倍の壁 ----
Scala C#(Mono) Haskell(GHC) OCaml CommonLisp(SBCL) Fortran
---- 10倍の壁 ----
Lua(LuaJIT) Erlang Scheme(PLTScheme)
---- 30倍の壁 ----
JavaScript(V8, Tracemonkey) Smalltalk(VisualWorks)
---- 50倍の壁 ----
Python PHP
---- 100倍の壁 ----
Perl Ruby(JRuby, Ruby 1.9)

もちろん実際には、動かすプログラムによって大きく差があるんだけどね。

[ruby][memo] gem環境を再構築した

以下、特におすすめしないよ

やりたかったこと

  • ruby 1.8とruby 1.9の共存
  • ~/.gemに入れる (sudo使わない)

手順

Ruby 1.9.2のtrunk(git mirror)を取ってきて、ruby-1.9という名前でインストール

  • 最近はRakefileでやってる
  • rake ruby-trunk AS=ruby-1.9 で、~/bin/rubys/以下にインストールされる

sudoで入れた方を全削除 (Standards: RubyGems Best Practiceより)

$ yes | sudo gem uninstall '' -a

~/.gemにパスを通す

export PATH=/Users/yhara/.gem/ruby/1.9.1/bin:/Users/yhara/.gem/ruby/1.8/bin:$PATH

複数のgemコマンドで一括インストールするにはgemiを使う

  • gem install gemi --source=http://gemcutter.org
  • gemi install foo で gem install foo と gem-1.9 install foo が走る

今の.gemirc:

- :name: 'MRI 1.8'       # used just for showing messages
  :command: 'gem'  
  :options: '--no-format-executable --user-install'

- :name: 'MRI 1.9'
  :command: 'gem-1.9'
  :options: '--format-executable --user-install'

つまりどっちも~/.gemに入れて、実行ファイルは foo と foo-1.9 のように命名される。

経緯

  • 本当は foo-1.8 と foo のようにしたかったのだけど(Rubyistとして)、portsで入れたRuby 1.8が ruby という名前になってるので無理だった。
    • Ruby 1.8も自前で入れるようにすれば可能。
    • Rakefileをこれ以上いじるのが面倒になったので、延期。そろそろRakeじゃなくて普通のRubyスクリプトにした方が楽そう
  • ~/.gemに入れるには gem install foo --user-installでOk
    • 1.8.x は ~/.gem/ruby/1.8以下に入る
    • 1.9.1, 1.9.2は ~/.gem/ruby/1.9.1に入る (どちらも拡張ライブラリがバイナリ互換なので)
  • 1.9で~/.gem生活を送るにはtrunkが必要!
    • 1.9.1には、デフォルトで~/.gemからロードしてくれないバグがある(1.9.2で直る)
  • 1.9.1と1.9.2でgemを共有するためには、両方を「同じ名前で」インストールする必要がある
    • 別名にしてsymlinkで切り替えるのではダメ
    • なんでかというと、実行ファイルのshebangにインタプリタのパス名が入るから
    • 例:~/.gem/ruby/1.9.1/bin/rake-1.9 には #!/Users/yhara/bin/rubys/ruby-1.9/bin/ruby-1.9 と書かれている
    • 1.9.1を「ruby-1.9」という名前でインストールしておき、1.9.2が出たらまるごと置き換えればOK (1.9.1と1.9.2とか、1.9.2-preview1とpreview2とか同時に使いたいケースはあまりないよね?)
  • --format-executableを「途中で」切り替えるのはおすすめしない
    • 実行ファイルfooが入ってるときにfoo-1.8として上書きインストールすると、uninstall fooしたときにfooの方が消えてくれないバグがないだろうか