2010-01-01から1年間の記事一覧

ytljitの型推論の説明(その5)

今回は、collect_candidate_typeの説明です。candidateとは候補とかそういった意味です。つまり、そのノードの型になる候補(複数かもしれないし0かもしれない)を収集します。前回説明したとおり、この候補から型を選び出すのが、decide_type_onceです。colle…

ytljitの型推論の説明(その4)

ytljitでao benchが動いたらruby-listにアナウンスするんだ!と決めているのですが、なかなか動かなくて苦労しています。さて、型推論の説明の続きです。ytljitではYARVの命令列をノードと呼ぶオブジェクトのグラフ(VMと呼んでいる)に変換し、その後そのグラ…

ytljitの型推論の説明(その3)

しつこいようですが、シグネチャーはメソッド呼び出しの際の引数を推論した結果の型オブジェクトの配列です。そして、型推論の際には必ずシグネチャが必要になります。 この2つのことから勘のいい人は気づくかも知れませんが(私はプログラムしてバグるまで気…

ytljitの型推論の説明(その2)

2回目はシグネチャーを作る話です。シグネチャーはメソッドの引数の型オブジェクトを配列でまとめたものです。型オブジェクトという未定義の言葉が出てきたので、これから説明します。型オブジェクトはRubyのクラスをWrapしたオブジェクトです。型オブジェク…

ytljitの型推論の説明(その1)

今、ytljitでうまく推論出来ないプログラムがあっていろいろ直しています。うまくいかないプログラムはこんな感じのものです。 def f yield end f { 1 + 1} f { "abc"} このバグの話の詳細を書くと訳わからなくなるし、詳細はどんどん変わっいるのでそれは書…

LLVMを捨てたやつが書く、怪しげなLLVM入門

>>> @miura1729 RT @yppp: あーあ、llvm使って言語作りたいけどバイトコードの 組み立てかたがわからない・・・・・・、 あとBoehm GCの組み込みかたも・・・・・・、まずはASTを作れって話なんだけどなw ああ、やる気がほしいhttp://twitter.com/repeatedly…

RubyKaigi2010 3日目

いよいよ発表の日。朝、4時に目が覚めてWebDBを読んだり、Twitterを読んだりしてました。5時過ぎにまた寝て6時に起きました。うだうだして7時に朝食。650円だったのですが、ごはんお代わり自由、コーヒー飲み放題とかなりお得でした。 食後またうだうだして…

RubyKaigi2010 2日目

RubyKaigi2010に行って、しゃべってきました。毎年行きたいと思っていたのですが、お祭りだ商工会だで行けなかったのですが、今年はちょうど予定がかぶらなくてばっちりでした。金曜日はさすがに仕事が休めなかったので、土曜日の2日目からです。初めにスタ…

ProcオブジェクトのMarshal(その2)

Marshalモジュールは特殊なオブジェクトや拡張ライブラリで定義したオブジェクトに対応するために、Marshalしたいオブジェクトのクラスにメソッドを定義することでMarshalの仕方をカスタマイズできます。それも、カスタマイズの方法は3通りあります。 marsh…

ProcオブジェクトのMarshal(その1)

YTLJitはコンパイル速度を上げるために、コンパイル途中の情報(VMと呼んでいる)をファイルに保存できるようにする予定です。VMはProcオブジェクトを多用しているので、ProcオブジェクトをMarshal出来るようにしました。結構込み入った話で、忘れそうなので仕…

Rubyで未使用変数を指摘するプログラム

kwatchさんの日記を読んで( http://d.hatena.ne.jp/kwatch/20100616/1276650107 )、未使用変数を指摘するプログラムを考えてみました。バイトコードを解析するという方針で、プログラムを作ってみました。Ruby1.9でしか動かないです。http://gist.github.com…

パターンマッチの続き

まめめもでku-ma-meさんがパターンマッチを使って面白そうなことをしておられるので、私もやってみました。 http://d.hatena.ne.jp/ku-ma-me/20100522/p1 やっぱり実践的な使い方をするといろいろ問題点が出てきて良いですね。最新版のプログラム(matcher.rb…

パターンマッチ

いま、ytljitというネイティブコードに落とせるVMを作っているのですが、Rubyにパターンマッチがないために時々悔しい思いをしています。日曜日にGaucheのコード(compile.scm)を読んでいてパターンマッチを上手に使って簡潔に書いてあるのを見て自分でも作る…

ytljitのVM案

追記 2/16 この方法だとレジスタの寿命が必ずネストしてなくてはいけないことになる。実際に使われているところを解析すればいいのだが、せっかくだからレジスタの寿命がlexicalに見えていたほうが嬉しい。ちょっと検討してみる。 結局、寿命解析をするよう…

進みましたが、バグがいっぱいです

ytlのアセンブラはRubyにアロケートしたメモリにバイナリを生成してJITで実行できるようになりました。でも、いろいろ試していたらバグがいっぱい出てきて直さないといけないです。特に、間接アドレッシングの当りは全然だめです。こんな感じでプログラムが…

現実逃避しています

いまは、非常に忙しいです。忙しいので、こんなことをしていてはいけないのですが、プログラムを作っています。これが楽しい。で、なにを作っているかというと、Rubyでアセンブラを作っているのです。http://github.com/miura1729/ytljit初めにアセンブラを…