Sunday 12 July 2009

Aspect, Reflection

歴史的には Reflection の方が先。プログラムの実行を Meta Circular Interpreter (インタプリタを、その言語そのもので記述する) で表して、その Interpreter 内のデータを書き換える API を言語側に用意するってわけ。取って来るのが Reification で、その変更を反映するのが Reflection 。Smalltalk は、もともとVMなので、相性は良い。

Java だと、class とか method にアクセスするAPIという位置付けですね。

でも、それだと何でも出来ちゃうし、何でも出来るようにすると遅い。なので、もう少し制御できる仕組みにしようってのが Aspect なんだと思ってます。

point cut ってのが、Reflection を行なうポイントなんだけど、どうも用語がなぁ。point cut を指定する方法が問題なんですが、あまり決定番はないらしい。Spring の method 呼び出しに限るってのは、妥当な気がする。

Interpreter だとあれなので、コンパイラに組み込んで C でも Reflectionするなんてのもあったはず。

Xerox PARC のGregor Kiczales が結構元気な人で、Reflection の成果を Aspect J という形でまとめたのは偉いと思う。東工大に来た時に、珍しくあって話したが、あんまり変わってなかったな。それも、もう随分昔だけど。

No comments: