Inverting back the inversion of control or, Continuations versus page-centric programming, Christian Queinnec, (1)

継続(continuation)を用いてwebプログラミングをすると、これまでの開発手法よりも従来のアプリケーション開発に近いスタイルで行うことができるようになるよ、というお話。
そもそも、なんでwebアプリケーションの開発が面倒になるかというと、以下の様な理由があるという。

  • HTTP自体はステートレスなので、クライアントとサーバが何度もやり取りを行うようなアプリケーションの場合、クライアントの状態を保持するのに、セッションを使うなどしないといけない。これが複雑で面倒である。
  • クライアント(ようはブラウザ)側の「戻る」ボタンや新しいウィンドウ・タブを使うことによって、すでに入力された値を再度入力することが出来てしまう。例えば、ショッピングサイトでの注文ボタンの二度押しなど。これに対処しないといけない。

こういった問題から、開発者を解放するのが継続を使った開発*1なのだという。
継続そのものについては、そこいらにいい紹介があると思うので、深く突っ込みはしないが、簡単に言うと、「プログラム中のある時点で、それ以降行わないといけない処理」のこと。例えば、継続をファーストクラスで扱うことの出来る言語としてはSchemeが真っ先に思いつくと思うけど、Schemeでは継続は一つの関数として扱えるようになっている。
これだけだと良くわかんないと思うので、

あたりを見ると、大体イメージできるかもしれません。特に二つ目一つ目の川合史郎さんによる解説がわかりやすかったです。
それで、この継続とwebアプリケーションがどう関係してくるのかという話に移ります。
最初に言ったように、webアプリケーション開発において面倒なことは、クライアントの状態を保存することです。なので、クライアントの状態を容易に扱うことが出来れば、ローカルで動かすインタラクティブなアプリケーションと同じように開発を行うことができるようになるだろう、というのがこの論文の趣旨です。そしてそのクライアントの状態を、継続を使って表してあげましょうという事です。
[続きはここで]

*1:というかCPS