先日、稚内北星学園大学学長の丸山先生の講演を聴いてきました。
その中の「メタプログラミング」という言葉がとても印象的でした。
J2SE5.0ではメタデータを使うことで、従来は煩雑なインターフェース
を作成や実装をさせなければならなかったところをPOJOに属性を与える
ようなスタイルで簡便に記述することができるようになっています。
実際には処理系がメタデータを読み取り、必要なインターフェースの
生成や実装をしてくれます。つまり、メタデータは「プログラムを生成
するプログラム」であるわけで、これを「メタプログラミング」と丸山
先生は呼んでいました。
今後はEJB3.0に代表されるように従来は難易度が高いとされていたJava
の各技術もメタデータを記述することでより簡単により広い層の開発者に
利用されるようになることが期待できます。ですが、その一方でメタデー
タから実際のプログラムを生成する「裏方の仕掛けを作る人」の需要が
高まってくるであろうと予測されています。使う人と作る人の役割分担
がより明確化してくるというわけですね。メタデータというとちょっと
抽象的ですが、よりイメージしやすい例としてはJSFのUIコンポーネント
を開発するという役割もこれに近いといえるかと思います。
思えばプログラミングの進化というのは新たなメタプログラミング手法
の出現の歴史の繰り返しともいえるのではないでしょうか?機械語にと
ってアセンブラはメタプログラムですし、アセンブラにとってJavaやC
もまたメタプログラムの関係にあります。この観点でいうと「メタプロ
グラムを作る=コンパイラを作る」ということであるとも言えます。一
つのメタプログラミング手法が開発されるたびに言語水準はより抽象的
で粒度が大きく、人間にとってわかりやすい方向に進化してきているよ
うに感じます。昨今のGroovyに注目が集まる理由の一つには、メタデー
タに対する期待と同じニーズが根底にあるようにも思います。
機械語からすればJavaやCのような高水準言語は同じプログラムであり
ながら全く似ても似つかないものです。そう考えるとUMLダイアグラム
が現在のJavaやCのコードの一部を肩代わりするという発想も実は自然
な流れのように思えてきます。シンタックス上の相違点を取り上げて
「UMLがJavaコードの代替となりうるか?」を議論するのは不毛な感じ
がします。メタデータにしても「@〜」という記述方法はJavaとは異質
なものですが、既にXDocletやJavaDocなどで広く受け入れられている
手法でもあります。「All or Nothing」の考え方ではなく、見かけの
シンタックスに捕らわれず、適材適所でメタプログラミング的手法を
適用していくのがこれからの賢いプログラミング手法なのではないか
と感じました。