msumimz's diary

RubyにJITコンパイラを実装する個人プロジェクトの情報発信ブログです。

メソッド引数とselfを実装しました

久しぶりの更新になります。

遅々として進みませんが、開発が行き詰まっているわけではなく、仕事が多忙であまり時間がとれないためです。*1

さて、前回はベンチマークを取り、その結果、単純にJITコンパイルしただけで高速に実行されるわけではないことが判明しました。そこで最適化を実装することにしたのが前回までのあらすじになります。内部ではいろいろ実装中で、githubのコミットもそれなりに進んでいるのですが、外から見た変化はまだほとんどありません。

今回は、最適化とは別に、言語機能の追加として、メソッド引数を実装したのでご紹介します。こんなコードが動くようになりました。

# 2つの引数をとるメソッド
def m(a, b)
  a + b
end

precompile Object, :m

m(10, 20) # => 30

ついでに、selfも呼び出し可能になりました。selfは「隠し引数」として実装されるので、メソッド引数のついでに追加しています。

class Fixnum
  def add(a)
    self + a
  end
end

precompile Fixnum, :add

10.add(20) # => 30

今のところはinstance_evalなどのselfを変更するメソッドには未対応です。

当たり前すぎる機能で感動もないですね。以上、進捗報告でした。

*1:あと、いまだにSkyrimとかやっているためです。