Hatena::ブログ(Diary)

miura1729の日記 このページをアンテナに追加 RSSフィード

2009-12-20

yarv2llvmの作り直しの検討 MethodBehaviorクラス

09:06 |  yarv2llvmの作り直しの検討 MethodBehaviorクラスを含むブックマーク  yarv2llvmの作り直しの検討 MethodBehaviorクラスのブックマークコメント

yarv2llvmを作成していて、メソッド呼出毎にさまざまにコンパイルの仕方を変える必要があることがわかりました。

例えば、eachは多くの場合インライン化する必要があるし、String#packは第1引数テンプレートを見て型推論を行う必要があるし、newはエスケープ解析の結果でどこにアロケートするか変えないといけないわけです。

現状のyarv2llvmはこの辺をアドホックにテーブルを作って対応していたのですが、メソッドごとの振る舞いをちゃんとクラスにまとめたほうがいいなと気付きました。

  • 振る舞いの異なるメソッドごとに用意する
  • MethodBehaviorクラスは次のような動作をおこなうメソッドを用意する
  • MethodBehaviorDefaultクラスを用意し、普通のメソッドはそれを利用する。また、他のクラスは、MethodBehaviorDefaultを継承するようにする

追記

 いっそのこと、これらのオブジェクトノードにするASTを作ったほうがいいと気付いた。MethodBehaviorという名前はSendNodeHogehogeとかとい名前になる。他にも変数参照などのノードも作る。ASTを作成後、型推論トラバースを型が収束するまで繰り返し、コード生成をトラバースする。

トラックバック - http://d.hatena.ne.jp/miura1729/20091220/1261267605