OTP に関する公式のイントロダクションが elixir-lang.org にある1。今年の1月にいちど、これに取り組んでいる2。うまく飲み込めず不完全燃焼と感想を残していて、そのままになっていた。これをあらためて 5. Dynamic Supervisor の章までやりなおした。

こんどは前よりもずっとたしかな手応えを感じている。 Process, GenServer, Supervisor といったあたりの API を主題として、自分はいまいったいなにを書いているのか、それはどうして嬉しいのか、ということをクリアに意識しながら読みすすめることができたようにおもう。

任意の単位で Process を生成して、仕事を分散する。クライアントの Process とサーバーの Process をわけてメッセージをやりとりさせる。子の Process があらゆる理由で死ぬことを見越して、プロセスどうしを link したり、親プロセスに子プロセスの状態を monitor させたりする。そうした Process どうしの関係とライフサイクルを管理するために supervision tree を定義してアプリケーションを起動する。

こういったことの見通しが持てるようになった気がする。ひとつひとつの言葉の意味を、はじめてきちんと理解できた。そういう感触がある。

あらゆる予期せぬ異常事態が起こりうるときに、異常が起こった部分だけを軽量に再起動することができることが設計によって保証されている。それはつまり、大量の例外制御を記述してまわることを止めて、予期せぬ失敗は失敗させておく、ということらしい。なかなか大胆な思想にみえるが、現にそれが効果的であることもすでに証明されているわけで、それがすごくおもしろい。