Saša Jurić の Elixir in Action, 2nd Ed を読んだ。
https://www.manning.com/books/elixir-in-action-second-edition

この本は前々からいつか読んでみようと思いながら、いやいまはもっと他にやりたいことがあるから止めておこう、と躊躇していた。そしてもっとやりたかったはずの他のことがすべてバカバカしくなってしまったときに、これを思い出して読むことにしたのだった。

序章では基本のシンタックス、中盤に OTP のイディオム、そして最後に分散システムについての記述がある。注目すべきは、まずはすべて Elixir で実装することを促されることにある。読者は Elixir でキャッシュサーバーを書き、プロセスレジストリを書き、データベースサーバーを書き、コネクションプールを書く。それが GenServer だけでほとんどすべて実装可能であることを示したうえで、 Registry とか :ets とか :rpc とか、より具体的な機能をもったモジュールを緩やかに学ぶことになる。

最終的には、データベースの簡単なレプリケーションも実装してしまうことになる。それをはじめに目次でみたときには、いったいどれだけ難しいことが書かれているのだろうと訝しんだが、読み終えてしまえば、並列性を意識してプログラムを設計するという考え方が、そのまま分散コンピューティングになめらかに接続していることがわかる。

終盤、シンタックスや設計のいろはを離れて、具体的なライブラリのユースケースに着目するところに及ぶと、テキストで紹介された API がすでに廃止されていることが多々あった。 Elixir のライブラリにおいてのみならず、 Erlang のほうにおいてもそういう場面に遭遇した。版が改まっているとはいえ、それからさえもう4年経っているのだから、仕方なくはあるか。でも、やっぱりモチベーションは削られて、最後の二章を残して読み終えないままになりかけていた。ひとまず最後までなぞりはしたが、最終章の直前までのコンテンツがもっとも充実していたとおもう。

GenServer を最小の構成部品にしていろんなものを実装する本だ。そう上で書いたけれど、実際には標準の GenServer モジュールを使い始める前に、 spawn/1 をプリミティブとして MyGenServer を自作するところから始まる。かつて別のチュートリアルで OTP をなぞったときには、ひとつのモジュールにクライアント向けのインターフェースとサーバー向けのコールバックを並べて、ややボイラープレート式のコードをいくつも書いて、果たしていったいなにをやっているのだろう? といまいち腑に落ちない思いをしていたが、どのコードがどのプロセスで評価されるのかを MyGenServer の手ほどきで飲み込まされて、ずいぶんとクリアな理解がもたらされた。第四章から第六章がこれにあたる。

OTP へのエキサイティングな入門書であった。 OTP を学ぶための道具として Elixir を使っているにすぎないという見立てまである。 Elixir の存在意義は OTP を扱いやすくすることにあるのだ、という雰囲気さえ感じられる。面白いテクノロジーだというおもいを新たにした。ウェブではない領域でどのように応用されているだろうかと強く興味を持った。