Emerging Languages Campについて

Jean Bezivin さんの引用からですが、これから有望そうなプログラミング言語に関する集まりがあるようです。 やはり興味深いのはどのような言語があるのかという点です。 講演者のページをみるとそれが分かります。

  1. Emerging Languages Camp
  2. Emerging Languages Camp: Speakers

すぐにメジャーになるものが含まれているかどうか分かりませんが、今日このように多様なアプローチが提案されているというのは現在主流の言語に飽き足りない方々が多く存在するということなのでしょう。 UMLに対するDSLはこれに近い話なのかもしれません。

Emerging Languages Campについて

モデリング言語とMDDについて(2)

何となく今こう考えているということですが ・・・

1 メタモデルまたは概念モデル

どんな手法でモデリングをするにしても、やはりメタモデルまたは概念モデルといったものが最初にきます。 表現方法はいろいろあって、MOFを使うものや、EBNFのようなプログラム言語設計記法を使うもの、更に多分もっと純粋数学的なものなどです。

2 モデル

モデルはモデリング言語で書かれた対象の記述になります。 世の中でもっとも使われているモデリング言語がUMLだとすると、純粋なUMLモデルやUML Profileを含んだ拡張UMLモデルがここで言うモデルにあたります。  EBNFのようなものを使って文法を規定した場合は、その文法に従って書かれたテキストがモデルにあたります。

3 プログラム

プログラムとモデルの違いは何でしょうか? 言語定義の厳密さレベルの違いもありますが、プログラムはコンパイラやインタープリタを使い実行できます。 OMGでもExecutable UML的な検討が長年行われていますがまだ時間がかかるようです。 もしこれが出来ればUMLもプログラミング言語に昇格し、UMLモデルはUMLプログラムと呼ばれるのでしょうか? そうかもしれませんが、現時点ではモデルはモデルであり、どうしてもそれをプログラムに対応付ける作業が必要で、人が頭の中で補完しながら変換して行くのが従来型の開発作業で、ある程度は(本当は出来るだけ多く)自動化したいというのがモデル駆動の基本的な考え方だと思います。 文法規則を決めて書かれたテキストモデルの場合も同様で、そのテキストは文法規則に従って解釈できる訳ですから、その文法とテキストを入力として対象プログラミング言語・対象インフラ環境をターゲットとしたマッピングを行えば良いだけです。 言うのは簡単ですが、実際にはモデリング言語やマッピング対象の多様性を考えると、なかなか標準的なものになりそうもないという印象を受けます。

4 DSL: 現実解の一つ(Xtext)

UMLを使ってもうまくMDDの流れに乗せられないとすれば、別の方式にも目が向きます。 UMLを使うMDAがまだ普及に至っていないのは、UMLの仕様自体の複雑さに起因しているのではないかという気がします。 仮にそうだとするともっとシンプルな方式の方が現実的かもしれません。 DSL、それもグラフィカルDSLではなくTextual DSL(何故なら、グラフィカルDSLの作成がそれ程容易でないため)、そしてInternal DSLではなくExternal DSLが良さそうです(こちらについてはご意見がありそうですが)。 この方向のツールにはXtext、MPS、Oslo M言語などがありますが、関連情報の入手のし易さとプラットフォーム非依存という観点からXtextが有力候補になります。 Xtextは今回書いているDSL設計、DSLに基づくエディタ、コード変換などがパッケージになっています。 Xtextが究極の解かと問われると独自仕様部分が多くまた競合製品・プロジェクトもありそこまでは言えませんが、現時点ではオープンな世界でかなり実用的に使えるものです。

モデリング技術は世の中に多くあるため、人により何を信じるのか異なる宗教のようなところがあります。 実際は効率よく良い結果が得られるなら何を使っても構わないとも思っています。 このポストに書いたことは「こんな見方もある」という程度でご理解下さい。

補足) 日本Grails/Groovyユーザーグループの山田さんから「Grailsプログラミングはモデリングと同じ」という見解を聞かせて頂いたことがあります。

モデリング言語とMDDについて(2)

Design Your Own DSL with Groovyについて

InfoQの記事(というかScreen Cast)で、Groovy言語についてのものです。 「Eclipse Community Awardsについて」のポストでGroovyに触れたのですが、余りご存じない方にはこういった Screen Cast も入り易いかもしれないと思いご紹介してみようと思いました。 ただちょっと時間が長い(90分程度)ため、時間のある時を見つけてご覧ください。

  1. Design Your Own DSL with Groovy

なおタイトルは Groovy で DSL を設計するというものですが、前半はGroovy 言語の説明が中心で後ろの方で DSL の話が出てきます。 ちなみに Groovy のホームページは以下にあります。

  1. Groovy
Design Your Own DSL with Groovyについて

Meta Programming Systemについて(2)

InfoQの記事の紹介です。

  1. JetBrains MPS 1.1: Performance Improvements and Easier Debugging

最初にこのツールの紹介をしたとき、「ちょっとマニアックな話題かもしれませんが」という書き出しで始めました。 まだまだこのカテゴリーに属する話題かもしれませんが、前のポストで書いたように Xtext が脚光を浴びようとしているタイミングで、対抗するTextual DSLの商用ツールであるMPSの記事が出たことは、少しこちらへの流れが出てきたのかなと思わせるものです。

このようなツールは、実際に使ってみるか誰かに使い方を解説して貰うようなことをしないと、分かりにくいところがあります。 しかし効果が期待できるものでもあり、Microsoft社のM言語なども含め、グラフィカルだけでないモデリングの世界に関心を持つ人が増えることを期待します。 なお、グラフィカルなモデリングツールが効果的であることに異を唱える訳ではありません。 ツールもタイミング・規模・適用分野など場面に応じて適材適所で使い分ける必要があると思います。

Meta Programming Systemについて(2)

Pharo Smalltalkについて

また Smalltalk 関連です。

Pharo というオープンソースの Samlltalk 実装があります。 きっとその道では有名なのだと思いますが、私は最近まで知りませんでした。

  1. Pharo Open Source Smalltalk

Pharo by Example というページへのリンクもありかなり立派な説明書のダウンロードが出来ますし、Screenshot を見ると iPhone 上でも稼働するようです。

Smalltalk に限らず、開発環境やモデリング環境が iPhone や Androind 上で動作する時期が近づいているような気がします。 モバイルプログラマーやモバイルモデラーの時代が来るのでしょうか。

Pharo Smalltalkについて

Meta Programming Systemについて

ちょっとマニアックな話題かもしれませんが、IntelliJ IDEで知られるJetBrains社からMeta Programming Systemのベータ版が公開されています。

  1. Meta Programming System

昨年末から気づいていましたが、ちょっと奥が深そうなので手を出さないでいました。しかし、Software Engineering Radioで紹介があったため改めて眺めているところです。

インタビューではMPSはプログラミング言語を拡張するためのシステムという言い方をしていましたが、これまでDSLと言う言葉で扱ってきた対象をプログラミング言語レベルからアプローチしようとしているもののようです。メタプログラミングが出来るプログラミング言語は昔からあって、LISPのマクロが初期のものとして有名です。

このようなアプローチ全般には既に名前が付いており、Language-oriented Programming と呼ばれています。もしグラフィカルなモデリングが今後行き詰まるようなことになったら、このような形態(モデリング2.0?)に進化・移行するのかも知れません。

Meta Programming Systemについて

UMLとプログラミング言語について

有名なEMF本の最初のところに書いてありますが、モデルをUMLで書いてもXMLで書いても更にJavaコードで書いても同じように扱えるということから、本質的にこれらは表現形式の違いに過ぎないことが指摘されます。もちろん任意の書き方のものではなく、ある程度ルールに従ったデータなら、ということになります。普通、モデリング言語で記述したものはプログラミング言語で記述したソースコードと比べると抽象レベルが高いものということになっていますが、このEMF本の場合はプログラミング言語といっても構造に関する箇所しかありませんのでそのケースに当てはまらないということです。

以前のポストでモデリング言語としてXMLが使えることに触れましたが、それはテキストエディタだけで仕事が出来ること、そして変換処理の対象として構造化されたテキストは非常に扱いやすいこと、などが理由です。しかし、単純にモデルを示して相互理解を図ることが目的であれば、やはりグラフィカルなUMLなどが良いと思います。

さて、UMLはプログラミング言語になれるでしょうか?OMGではExecutable UMLという仕様を開発しているようですし、以前UML用のVirtual Machineの研究をしているという方とお話をしたことがあります(限られた範囲で動いているとのことでした)。しかし元々抽象レベルが高いということは、詳細を切り捨てていると言うことでもあり、それを直接実行するというのは私にも「?」のところがあります。記述対象の構造面についてはUMLでもかなり記述できると思います。しかし、振る舞い面については状態遷移図がせいぜいではないでしょうか?UMLモデルがクラス図と状態遷移図だけから構成されるようなシンプルなシステムなら可能かもしれないと、余り自信はありませんが思います。

逆に、プログラミング言語が、例えば、ある使い方をするとUML相当の役割を果たす、というようになれば学習する言語の種類が減って良さそうですが、実際はそのプログラミング言語の複雑さが増すだけで、逆効果かもしれません。それに他のプログラミング言語利用者からは利用できないという問題も出てきそうです。やはり分かれていた方が良いようです。こういった意味で、XMLを使うというのは一つの選択肢なのかもしれません。

UMLとプログラミング言語について