言語ゲーム

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

Twitter: @propella

Chalkboard のトレードオフ。アクティブエッセイ用のツールについて(3)

某締め切りの関係で、不本意ながらソースコードも書かず文章ばかり手をかけています。ようするに、こういうのを訳して文体を変えて latex に貼付けるわけです。

前提として、プログラミング言語が高度に発達した将来。人々はプログラミング言語を日常的に書き、語り合う事になるというのを想定しています。機械が自然言語を理解するのでも無く、人間が機械に合わせるのでもなく、両者が歩み寄った形の言語が生まれるでしょう。おそらく 50 年ぐらい未来の話です。私にそのような言語は想像出来ませんが、そんな世界の紙と鉛筆はどうあるべきかというのを今現在の技術で試してみようというわけです。

という戯言はおいといて、デザイン上のトレードオフについて書いてみます。というのも、こういうのを見せると、こんな風に画面のこの位置がこんな風に役割が固定されてあるのが嫌だとか、もっと画面を自由に使って自由にズーム出来るのが良いとか、そういう未来的な意見に接する事があります。自由度という点では明らかに Squeak より劣っている以前に C5 でデモした TileScript より劣っている訳で、これではまるで牙を抜かれた虎ではないか。しかし何事も理由があるのです。

Chalkboard では、プログラムは一連のテキストです。つまり、一つのファイルにメソッドや文章がある順番で並んでいます。C や PASCAL ではメソッドの順序に制限があって、メソッドを定義する前に参照する事が出来ないですが、Javascript にはそういった制限は無く、プログラマが自由にメソッドの順序を決める事が出来ます。Literate Programming の議論であったように、プログラムの動作を説明するのに適した順序で並べるのが望ましいです。

画面構成は、上下スクロールバーのついたエディタが固定した場所を占めています。これは Squeak のようなマルチウインドウな UI と一番違う所です。Squeak ではウインドウを上下左右に自由に配置し、好きなメソッドを同時に参照する事が出来ます。LivelyKernel は SVG 描画機能を使って同じ機能をウェブブラウザ上に再現する事に成功しています。Chalkboard があえて単純な構成を使っているのは二つの理由があります。

まず Chalkboard の目的はウェブブラウザ上に優れた環境を構築する事では無く、表現手段としてのプログラミングを実現する為の最低限必要な要素を提供する事です。そのため Chalkboard は出来るだけ基本的な HTML 要素のみを使い、既存のウェブブラウザの機能を流用する事に重点を置いています。また、数多くのプラットフォームで動作する事を期待出来ます(IE も是非対応したいです)。

もう一つは、自由度を制限する事でアクセスしやすくなる事を狙っています。Chalkboard のエディタにスクロールバーは一つしか無いため、上下の配置さえ覚えていれば望みの位置に素早く移動出来ます。マルチウインドウのシステムでは画面を好きに配置出来るため、複雑な意味ネットワークを持つプログラムでは特に有効ですが、Chalkboard の対象とするような単純なシステムでは上下左右の位置関係、ウインドウの重なりを把握する手間が大きすぎると思います。

Chalkboard では、ファイルフォーマットに HTML をそのまま使っています。実行時にはその中から PRE タグの内容を取り出し、順に評価して行きます。編集は H1 や PRE など、行単位の編集のみで、単語単位の強調は出来ません。また、フォントなどの表示属性の変更は出来ません。これは、ブラウザごとの編集機能を標準化する目的と、文書の論理構造が壊れるのを防ぐ目的があります。つまり、自由度の大きすぎる WYSIWYG 編集機能によってユーザが予期しない事が起こらないようにとの配慮です。 これらのデザイン上の決定は、今までのプロジェクトの反省を基に行いました。Chalkboard にはまだユーザは居ませんが、フィードバックを基にさらに最適化してゆく予定です。