msumimz's diary

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

2014-07-01から1ヶ月間の記事一覧

定数を実装しました

定数を実装しました。 module Outer class C X = 10 end end def m Outer::C::X end Jit.precompile Object, :m puts m # => 10 定数の値はコンパイル時に展開されます。定数の再定義やオートロードにも対応しています。 class_eval辺りと組み合わせると問題…

Visual Studio 2013に移行します [追記あり]

今まではVisual Studio 2010でもコンパイルできるように書いていたんですが、少しずつVisual Studio 2013に移行しようと思います。移行によって、主にC++11の機能で使えるものが増えます。詳細なリストはC++11 の機能 (Modern C++) のサポートにありますが、…

README.mdを書きました

いんちき英語でREADME.mdを書きましたので、Githubにプロジェクト概要とインストール手順が表示されるようになりました。https://github.com/msumimz/ruby/tree/rbjit合わせて、JITモジュールを定義して、precompileメソッドをモジュール関数にしています。…

メソッドの再定義に対応しました

メソッドが再定義された場合に、JITコンパイルされたメソッドが正しく動作するための仕組みを導入しました。この仕組みはさまざまな実装方針が考えられ、実行速度・メモリ使用量・コンパイル速度・実装の容易さの間でトレードオフがあります。とはいえ、実装…

precompileのエラーチェックをちゃんとしました

こんなコードを実行すると def m) [1,2,3] end precompile(Object, :m) こんなエラーになります(配列リテラルをサポートしていない)。 $vc10/Debug/miniruby test.rb test.rb:5:in `precompile': m:2: Node type NODE_ARRAY is not implemented yet (Argum…

フルRubyのビルドに対応しました

今まではminirubyのみだったのですが、今回、フルのRubyのビルドに対応しました(Windowsの32bit版のみ)。ベースとなるRubyのバージョンは2.1.0です。LLVMはバージョン3.4を使っています。ビルドにはVisual Studio 10以降が必要です。ビルド手順は、以下の…

最初の最適化:型解析とメソッドのインライン化

前回の投稿から期間が空いてしまいました。実装にはいろいろ不十分なところも多いのですが、きりがないので記事にすることにします。前回のベンチマークでは、JITを実装したものの、単純なJITコンパイラではMRIのインタープリタによる実行速度に勝てないとい…