言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Intentional Software

http://intentsoft.com/technology/IS_OOPSLA_2006_paper.pdf

これもアランさんお勧め論文。未来のプログラミング環境の話です。

まず現在の問題として、プログラマが全部プログラムを書くのはおかしい、プログラムを使う人もプログラムを書くべきだというのがあります。プログラマはプログラムには詳しくても使う人の業務の都合なんかよく分からないので、そんな事で使いやすいプログラムが出来るわけ無いという事です。このあたりhttp://d.hatena.ne.jp/propella/20071218/p2 で紹介したマーチンファウラーの記事を先に読んだ方が良いと思います。

Intentional Software とは関係ないけど重要なのでマーチンファイラーの話のポイントを書くと、ユーザが簡単にプログラムを書けるミニ言語 (DSL) には二つあって、

  • 内部 DSL : RubyLisp で良く使われるように元の言語を使って設定ファイルを書く。実装が簡単だが下手に言語に触れるので妙なエラーに悩まされるかもしれない。
  • 外部 DSL : /etc ファイル群のように、独立した言語。何でも出来るのでユーザに優しいがメンテが面倒。

Intentional Software はこの二つの良い所どりを目的とする言語ワークベンチの一つです。

具体的には、プログラムの内容を、Intentional Tree という内部表現を使って、色々な言語で色々な書き方を出来るようにします。mathematica を使った事がある人は、数式を数学で使う伝統記法で表現したり、もうちょっと厳密な mathematica 記法で表現したり、果ては内部で使われているカッコだらけの記法で表記するのをご存知かと思いますが、あんな感じです。内部表現も同じで、ヘッダ (内容, 内容, ...) になってます。

注目のポイントは、4ページ目にある構造エディタ(structured editor)の分類です。構造エディタというのは、木構造を編集するためのエディタの総称で、Microsoft Word も構造エディタだそうです。で、それには二種類あります。

  • 文法指向エディタ (syntax directed editor) : 文法を元に入力を行う物。エディタは文法を知っているので、文脈にあう適切なメニューを出したり、文法に合わない文を入力出来なくする事が出来ます。
  • 写像エディタ (projecting editor) : モデルを元に編集用のデータを作成し、保存時にモデルを再構築しますが、文法による制限を行いません。

で、一見文法指向エディタの方が便利でそっちを使って最初研究を進めてきたけど、あまりにも窮屈だからやめたらしいです。つまり、プログラムを書く途中では、考えるプロセスで中途半端な断片を沢山エディタに打ち込むので、文法をいちいち気にしてられないという事です。なるほど。

感想

この手の話は、一つのモデルと沢山のビューをどう表現するかという話に一般化出来て応用も広いので、要注目の分野です。特に、文法指向エディタが上手く行かなかったという話はガックリです。なぜなら、私は etoys はまさに文法指向エディタだと思っていて、それが上手く行かないと言うのはまことに残念だからです。だけど失敗した話は大変勉強になります。