N2 ToolBox(跡地)

跡地です。引っ越しました。http://d.hatena.ne.jp/nosen

Language Oriented Programming

2005-02-13 23:54:53 | 開発手法/方法論
随分間が空いてしまいました。
忙しかった、というよりちょっとしたモチベーション層の
障害ってところでしょうか。。

さて、去年Martin FlowerのBlogに紹介されていた記事で
取り上げられていた、Language Orient Programming(LOP)というもの、
これはいったい何だろうと呼んでみたところ、
なんのことはない、MDAとかモデル変換っぽい話でした。
これが新しい話題ではないことは著者も認めています。

簡単にいうと、DSL(Domain Specific Language)を簡単に
作れるプラットフォームがあればソフトウェア開発がもっと
楽にできるようになる、というお話でした。
現状のソフトウェア開発では頭の中にあるもやもやっと
した概念をソースコードに落とす課程に多大なる労力を費して
いますが、概念とのギャップが少ないDSLをプログラマが簡単に
作れるようになればもっと楽ができる、と。
それは確かにその通りだと思いますが、実現するのは結構
難しそうです。この記事の著者は、Meta Programming Systemという
LOPのコンセプトを実現した実装を作ったそうです。
(もちろんまだreal worldで使えるレベルには達していないと
本人も認めていますが)

とはいえ、あらゆるモデルを記述できる言語を作ってしまおう
というUML2.0のようなアプローチと比べればずっと健全だと
思います。

さて、ここでDSLとは

  1. 言語の構造

  2. 言語構造を操作するためのエディタ

  3. 言語構造を実行可能なコードに変換するトランスレータ

の3つの部分からなると言われています。
ですから、LOPのコンセプトを具現するには

  1. 言語の構造を定義するメタ構造

  2. 言語構造を操作するためのエディタを簡単に作る仕組み

  3. 言語構造を実行可能なコードに変換するトランスレータを簡単につくる仕組み

の3つが必要であることがわかります。

Meta Programming Systemはすべてを自前で用意しようとしてる
みたいなのですが、実は個々の要素を見てみると世の中に既にあるものも
結構あるのかと思います。

1.は多分OMGのMOF(Meta Object Facility)とかEclipse EMF
のECoreとかにあたるものでしょう。
2.はEclipse のGEFとかEMFのエディタ生成機能とかが
近いものがありますが、GEFは"簡単に"エディタを作るには
あまりにも複雑ですし、EMFが自動生成する
ツリーのエディタは逆にあまりにもシンプルすぎます。
3.はMOF QVT RFPでいわれているものと同等のもので、
まともな実装はまだ無いのでしょうが、謎のEclipse GMT
とかがこれにあたるのでしょう。
(最近全然おっかけてないのですが、どうなってるんでしょうか?)

LOPというコンセプトはこれらを統合したところに新しさが
あるといえばあるといえると思います。
確かに実現できたら素晴らしいんですけどね。。

個人的には最後にDSLの構造を実行可能コードに落とす所を
"簡単に"記述するのがかなり難しいのではと感じています。
これは、去年仕事で自分が頑張った経験に基づいているかなり
確信の持てる意見です。ここが簡単にできないと、やっぱり
普通にJavaとかのソースコードごりごり書くほうが良いって
ことになってしまいそうです。

自分でLOPの実装に取り組むなら、やっぱりEcilpse EMF+GEFを
ベースにするかな。。でもあまりにも状況が混沌としているため、
容易にはとても手が出せないですが。

でもこのような考えをもとに、数年後にとてつもない
イノベーションが起こって、みんなHappyになってると
いいな、と期待します。でも難しいんだろうな。。。

最新の画像もっと見る