YARV: on Rails?
- Posted by Nick Sieger
http://blog.nicksieger.com/articles/2006/10/23/rubyconf-yarv-on-rails
Speaker: Koichi SASADA
発表資料はこちら。
http://www.atdot.net/yarv/rc2006_sasada_yarv_on_rails.pdf
- 自己紹介
- デモ
最適化には、コンパイル時最適化、ネイティブスレッド、特殊命令、命令統一、インラインメソッドキャッシュ、スタックキャッシュを含みます。YARVはconfigure/makeできますが、AC2.6ではうまくいきません(誰か理由を知っていますか?)。ほとんどのRubyテストをパスしていますが、実装の違いによる(テストの)失敗もあります。
[ここでWindows上でのYARVとWin32/OLEを用いたiTunesを制御するデモとIRBでネイティブスレッドを扱うシナリオを披露しました。]
YARVにまつわる俗説: YARVはすごい!YARVはあらゆる問題を解決します!Rubyプログラムを50倍速くします!文字コード問題を解決します!ガールフレンドが見つかります!
真実: YARVはRubyプログラムを速く走らせるためのものです。あるアルゴリズムのベンチマーク(たとえば、Ackermann, Fib)では20倍の性能向上をもたらしますが、ほかではそうではありません。YARVの命令シーケンスを組み立てたり、バラバラに分解したりできます。あるいはそれらを直列化したり、非直列化します。単なるRubyのリテラルで、YAML形式やその他の人間が読める形式に詰められます。
require 'yasm' require 'yaml' iseq = YASM.toplevel([:a, :b]) {|ib| ib.answer ib.leave } p iseq.to_a.to_yaml # => (gave a readable YAML view of the assembly)
- スレッド
- Rubyスレッドはネイティブスレッドに1対1でマップされます。
- POSIXとWin32をサポートします。
- 多くの現存するRubyライブラリはCレベルで同期化されていません。そのため多くのCライブラリは同期化を追加する必要があります。
- スレッドモデル2: Giant Lock(GL)を使って1対1にマッピングします。ロックをもつスレッドだけが走ることができます、同期化の必要はありませんが、並列性がありません。
- スレッドモデル3: Rubyスレッドは並列実行されますが、スレッドセーフでないコードが実行されるときはGLが取得されなければなりません。
- Mutexクラスはビルトインになります。
- Thread criticalはなくなります(廃止はされませんが、非推奨になります)。[一部の者にとっては異論があったようです。コメントとしては、ネイティブスレッドモデルで維持するのは不可能だけど、2つのスレッドモデルは互換性がある、とのことです。]
Matz: 2007年のクリスマスにリリースのRuby1.9.1には、YARVがマージされる予定です。そのため、2007年の春か夏までにはマージを完了したいでしょう。スレッドモデル2がまず適用されることになります。
- 今後
- リンク
- http://www.atdot.net/yarv/
- ML: yarv-dev と yarv-dev-en – "件名: [BUG] foo bar" でバグ関連情報
- http://www.atdot.net/~ko1/yarvbugs
- http://i.loveruby.net/autobuild/yarv – YARV ビルドプロセス
より多くの開発者とテスターが必要です。ぜひプロジェクトに参加してください。