OTP に関する公式のイントロダクションが elixir-lang.org にある1。今年の1月にいちど、これに取り組んでいる2。うまく飲み込めず不完全燃焼と感想を残していて、そのままになっていた。これをあらためて 5. Dynamic Supervisor
の章までやりなおした。
こんどは前よりもずっとたしかな手応えを感じている。 Process
, GenServer
, Supervisor
といったあたりの API を主題として、自分はいまいったいなにを書いているのか、それはどうして嬉しいのか、ということをクリアに意識しながら読みすすめることができたようにおもう。
任意の単位で Process
を生成して、仕事を分散する。クライアントの Process
とサーバーの Process
をわけてメッセージをやりとりさせる。子の Process
があらゆる理由で死ぬことを見越して、プロセスどうしを link
したり、親プロセスに子プロセスの状態を monitor
させたりする。そうした Process
どうしの関係とライフサイクルを管理するために supervision tree
を定義してアプリケーションを起動する。
こういったことの見通しが持てるようになった気がする。ひとつひとつの言葉の意味を、はじめてきちんと理解できた。そういう感触がある。
あらゆる予期せぬ異常事態が起こりうるときに、異常が起こった部分だけを軽量に再起動することができることが設計によって保証されている。それはつまり、大量の例外制御を記述してまわることを止めて、予期せぬ失敗は失敗させておく、ということらしい。なかなか大胆な思想にみえるが、現にそれが効果的であることもすでに証明されているわけで、それがすごくおもしろい。