yarv2llvmの近況
yarv2llvmを細々と作っております。いまやっているのは、大きく二つです。Threadのランタイムを作るのは止まっています。いろいろ、手を広げてみんな中途半端なのは良くない傾向ですが、まあそのうち何とかなるでしょう。カオスになって収集つかなくなるかもしれないですが。
メソッドを実現するC関数のアドレスをrb_method_nodeとそこから返ってくるノード構造体から求める機能を付けました。これで、原理上はRubyのすべてのメソッドが呼べるようになるはずです。でも、実際にはこの機能だけでRubyとの互換性が向上するほど甘くなくて、これまで動かなかったプログラムが動くようになることはほとんどなかったです。
Rubyでメソッドを実現するC関数は引数の数が可変のものと固定のもので呼び出し方が違います。そこで、メソッドがどういう引数をとるか知らないといけません。困ったな〜と思ったところで、ちょうどmethoparaという拡張を知り、やりたいことができるようになりました。開発者の皆様ありがとうございます。
http://github.com/genki/methopara/tree/master
もう1つは、attrとかattr_accessorなんかをマクロで実現しようとしています。こんな感じになるのですが、やってみるとマクロの中でイテレータが使えないとか問題が続出しています。これをモグラたたきの如く治しています。
YARV2LLVM::define_macro :attr_reader do |arg| arg.each do |argele| name = argele[0].type.constant `def #{name}; @#{name}; end` end end