JSON静的型付純粋関数型Webコンポーネント糊言語

丸亀製麺釜玉


金曜日にBPStudy #26に参加した。ハッシュタグは「#bpstudy」。

今回のテーマは「デザイナ/プログラマの“干渉のない並列作業”を支援するWebフレームワークCaty」である。
内容はテーマの“干渉のない並列作業”は実は前振りで、スキーマによる型チェック(+できれば型推論)ができる純粋関数型言語だった。(ただし遅延評価はない。スキーマによる型チェックはまだ未実装。)
スキーマによる型推論を持った関数型言語はF#もそうだったと思うけど、いくつか例がありそれ自身は新しいアイデアというわけではない。そこで、ポイントはWebフレームワークという文脈で有効な機能セットの取捨選択ということになる。

関数の呼び出しはUNIXシェルのパイプのセマンティクスになっていて、これが最大の特徴。

(a (b (c)))

と普通は書くところを

c | b | a

と書く。簡単な処理の場合には、この文法はなかなかよいかも。
ただ、この文法の場合複雑な処理を書こうとすると大変なことになりそう。ということで、複雑な処理は書かせないというのが一つの割り切りになっている。
なぜ、それが可能かというと、汎用プログラミング言語ではなくて、コンポーネントの糊言語に徹しているから。細かい処理はa, b, cの裏側でpythonで書く。

Catyの場合、流通するデータ構造をXMLではなくJSONにしている点もWeb向きのチューニングといえる。正確にはJSONの上位互換の独自アイデアのプロパティ付きJSONであり、意味論的にはXMLに近くなっている。
JSONベースの論理ファイルシステム(+いずれ論理KVS)という部品立てもあって、面白いアプローチになっていると思う。

“干渉のない並列作業”については、「厳密分離」の原則で、テンプレートにプログラムを直接書けないように機能を制限するというのがポイントである。基本的にCatyの出力するJSONをテンプレートに挿入することしか許さないということで厳密分離を達成しようという趣旨。現時点ではまたまだ発展途上だと思われるけれど、表や木構造などの汎用モデルやスキーマを使用したカスタム・モデル向けのウィジェットが充実すれば実用的に使える可能性は高い。

現在の所、静的型付はまだ未実装とのことだけれど、最終形はJSON静的型付純粋関数型Webコンポーネント糊言語ということになりそうである。

コンポーネント糊言語に徹することで、純粋関数型言語を実用化できるかもしれない、というのは注目すべき切り口である。
「純粋」であるということはプログラムの静的な検証が可能ということであり、関数型の本来の能力を実用化できるメリットは大きい。
一般的には状態遷移する現実世界を純粋関数型言語で扱うためにはモナドといった道具立てが必要になってくるはずなので、この点をどのように対応していくのかというのが技術的に面白そうな論点である。

とはいえ、仮に「純粋」や「静的型付」がなくても、関数型Webコンポーネント糊言語というだけでもニーズは大いにありそう。
Catyのアプローチは今のところ他で見かけないユニークなものであり、ウィジェットが充実すれば、かなり面白い存在になるかもしれない。