Profile-Guided Static Typing for Dynamic Scripting Languages
Rubyのようなプログラミング言語をターゲットに型推論を頑張りたい。require、send、eval、そしてmethod_missingに代表される動的な機構が厄介なのでこれを何とかする。具体的には動的な挙動を消すプログラム変換を行ってから推論させる。 最終的に付けたいのは静的な型だが、後述するように実行時のプロファイル情報を利用するという意味で型推論は静的でない側面がある。 大雑把なアイディアは以下の通り。
まずテストコードを使うなどしてコードを実行しつつ、動的な構文要素について、ソースコードのどの位置の要素がどういうコードとして解釈されたのかプロファイリングする。
次に、プロファイルを利用しながらコードから動的な要素を取り除くようにプログラム変換する。
動的な機構の多くは、実用的にはそこまでたくさん動的には使われていないのではないか?、という考えにもとづく。
動的な要素を含む小さめなプログラムに対して、いくつか動かない部分は修正しつつも、型推論できたらしい。
どういう場面で修正が必要だったかは論文に書かれている。
論文に書かれている(つまり2009年頃の)結果としては、2万行程度のコードを5分くらいかけて解析している。