2009-01-08
Threadをサポートした
|@llvm.atomic.swap.* 使いたい! っていう変な理由でThreadをサポートしました。
遊ぶのが主目的で信頼性はどうでもいいので注意が必要です。といっても、yarv2llvm全体もそういうスタンスなので問題ないと思います。rb_thread_createという目的にぴったりと思われる(かなり自信は無いのですが・・・)、APIがあったのでこれを使いました。インタフェースはRubyに合せてあります。こんな感じで動いているのですが、GCとか大丈夫かは判りません。これで、@llvm.atomic.swap.*で遊べそうです。
YARV2LLVM::compile(<<-EOS) def tthread Thread.new { 10.times do |i| p i end } print "END" 10.times do |i| puts sprintf("foo%d", i) end nil end EOS
出力結果例(スレッドなので場合によって異なる)
0 1 2 3 4 5 END6 foo0 foo1 foo2 foo3 foo4 foo5 foo6 foo77 8 9 foo8 foo9
コメントを書く
トラックバック - http://d.hatena.ne.jp/miura1729/20090108/1231419160
リンク元
- 20 http://www.rubyist.net/~kazu/samidare/
- 3 http://b.hatena.ne.jp/entrylistmobile?url=http://d.hatena.ne.jp/miura1729/
- 3 http://d.hatena.ne.jp/keywordmobile/llvm
- 2 http://d.hatena.ne.jp/
- 2 http://s.hatena.ne.jp/miura1729/blogs
- 2 http://s.hatena.ne.jp/mobile/miura1729/
- 1 http://a.hatena.ne.jp/asip/
- 1 http://a.hatena.ne.jp/fujita-y/
- 1 http://a.hatena.ne.jp/kei-os2007/
- 1 http://b.hatena.ne.jp/cranebird/add.confirm?url=http://d.hatena.ne.jp/miura1729/20090107/1231333302