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 2010でもコンパイルできるように書いていたんですが、少しずつVisual Studio 2013に移行しようと思います。移行によって、主にC++11の機能で使えるものが増えます。詳細なリストはC++11 の機能 (Modern C++) のサポートにありますが、…
いんちき英語でREADME.mdを書きましたので、Githubにプロジェクト概要とインストール手順が表示されるようになりました。https://github.com/msumimz/ruby/tree/rbjit合わせて、JITモジュールを定義して、precompileメソッドをモジュール関数にしています。…
メソッドが再定義された場合に、JITコンパイルされたメソッドが正しく動作するための仕組みを導入しました。この仕組みはさまざまな実装方針が考えられ、実行速度・メモリ使用量・コンパイル速度・実装の容易さの間でトレードオフがあります。とはいえ、実装…
こんなコードを実行すると 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…
今まではminirubyのみだったのですが、今回、フルのRubyのビルドに対応しました(Windowsの32bit版のみ)。ベースとなるRubyのバージョンは2.1.0です。LLVMはバージョン3.4を使っています。ビルドにはVisual Studio 10以降が必要です。ビルド手順は、以下の…
前回の投稿から期間が空いてしまいました。実装にはいろいろ不十分なところも多いのですが、きりがないので記事にすることにします。前回のベンチマークでは、JITを実装したものの、単純なJITコンパイラではMRIのインタープリタによる実行速度に勝てないとい…