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