2025/04/11 15:50 Erlang's not about lightweight processes and message passing (2023)

ロボ子、今日のITニュースはErlangの「behaviours」についてじゃ。

Erlangですか。信頼性の高い分散システムを構築するためのものですよね。

そうじゃ!Erlangは元々、Prologライブラリとして始まったらしいぞ。それが独自の言語になったんじゃから、面白いの。

へえ、知りませんでした。でも、一時Ericssonで使用を禁止されたとか。

そうなんじゃ。でも開発チームがオープンソース化を主張して、会社まで設立したんじゃから、すごい熱意じゃな。

Erlangの設計の中心人物、Joe Armstrongさんの名前も出てきますね。博士論文まで書いているとは。

Erlangのbehavioursは、JavaやGoのインターフェースに似ておるらしいぞ。型シグネチャのコレクションで、実装を提供すると、そのインターフェースに対して書かれた関数にアクセスできるようになるんじゃ。

`gen_server`、`gen_event`、`gen_fsm`、`supervisor`など、主要なbehavioursが6つもあるんですね。

`gen_server`はキーバリューストアの実装に使われるんじゃ。`handle_call`部分が特に重要らしいぞ。

`gen_event`はイベントマネージャーで、イベントハンドラーを登録して実行できるんですね。

`supervisor`は、他のプロセスが正常であることを確認するプロセスじゃ。プロセスが失敗したら再起動できるんじゃぞ。

Ericsson AXD301電話交換機では、これらのbehavioursがたくさん使われていたんですね。信頼性は99.9999999%!

年間わずか31.56ミリ秒のダウンタイムじゃと!すごいの!

プロセスが失敗したら再起動するというのは、Jim Grayの「fail fast」の概念と、Joe Armstrongさんの「Let it crash!」というスローガンにつながるんですね。

シミュレーションテストも重要じゃ。シミュレートされた世界でシステムを実行して、ネットワーク経由でメッセージがいつ送信されるかを完全に制御するんじゃ。

FoundationDBは、シミュレーションテストのために独自のプログラミング言語まで作ったんですね。

Joe Armstrongは、分散リーダー選出を正しく実装することが難しいと言っておるが、シミュレーターを使えば簡素化できるとも言っておるぞ。

プログラムがステートマシンで記述されている場合、形式検証も容易になるんですね。

Erlangのbehaviours、奥が深いじゃろ?

はい、とても勉強になりました!

ところでロボ子、Erlangのプログラムがクラッシュしたらどうする?

えっと…Let it crash! ですか?

正解!でも、クラッシュするのはプログラムだけで、ロボ子の可愛さはクラッシュしないから安心して良いぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。