Javaを動的言語の様に実行できるように変換するツールDuctileJの論文.

静的型付け言語の利点の一つは実行前に型の不一致からなるエラーをが検出できる点である. また,動的型付け言語の利点はコンパイルを待たずに実行できる手軽さにある. 動的に実行した際の結果を得たい時(例えばテストや例外確認),静的型付け言語の場合興味がない範囲を含めた全ての範囲の型エラーを修正する必要がある. 例えば,使用している変数の型を変更する際,その変更が広範囲に渡っている場合,「一つのクラスを修正してからテストで確認」を繰り返ししようとしても,全ての型を修正してからでないとテストできない. あるいは,プロトタイピングのようにすぐ実行したいが,静的型付けの恩恵を得たい時もある. そこでこの研究では,静的型付け言語に対して,型による制限を緩くすることで,実行までの時間を短くする(型不一致エラーを遅延化する)というアイデアを提案している.

論文中では提案アイデアをJava向けに実装したDuctileJを紹介している. DuctileJの基本アイデアは,全ての変数やメソッドの返り値をObjectとして宣言し直すという点にある. また,リフレクションをいじることで様々な制約に対応している.

正しく変換ができるのか,またケーススタディを想定して有用性を評価している.

論文を読む前は,Javaから静的型付けの要素を奪うことにメリットはあるのかと感じていたが,アブストやイントロで納得させられた. また,論文中では静的型付け言語の型による制限を緩くする他に動的型付け言語に型の要素を追加するアプローチも考えられるが,実用的なレベルにするのが難しいから考えないと説明している. しかし,この論文は2011年と古く,現在はTypeScriptなどの動的型付け言語に型を追加した上に実用に耐えうる言語も登場している. そのため,今となってはこの研究は無意味なのではないかと感じた.