Erlang/OTP トレーニング 2013.10に参加しました

仕事とはまったく関係無いですが、Erlang/OTP トレーニング 2013.10に参加してきました。

軽量 HTTP サーバ Cowboy の作者 Loïc Hoguin 氏によるトレーニングです。 Hoguin氏は Nine Nines という会社でErlangトレー ニングを本職でやっており、今回のトレーニングもかなり本格的なものでした。

進み方

Erlangの各登場人物とその位置づけから始まります。

  • Node

  • Process

  • Port

  • ETS Table

Erlangのキーポイントは以下の6つ。

  • Concurrency (processes)

  • Error encapsulation (isolation)

  • Fault detection (what failed)

  • Fault identification (why it failed)

  • Live code upgrade (evolving systems)

  • Stable storage (crash recovery)

Erlangはメッセージでやりとりします。メッセージでのみやりとりできます。 しかもメッセージは非同期です。でも、現実世界では実際そうですよね? ある人の考えは他の人には分からない。言葉、メッセージがないと伝わらない。

などなど、Erlangの抽象的な説明から始まりました。

実践

一通りの文法を説明した後、実際にエクササイズとしてコードを書いていきます。

  1. Function

  2. Guard

  3. Case

を説明し、

  1. Recursion

に入っていきます。Accumratorを使うなどのエクササイズもありました。

その後メッセージングです。

  1. message passing

  2. Receive

  3. Receive Loop

  4. Process State

    • stop/increment/get_counter とか

その後、incrementは返り値がいらないけどget_counterは返り値が必要。つま り、

  • call

  • cast

の二つを実装しました。

  1. monitorとdemonitor

でメッセージの監視を追加してエクササイズは完了です。

  1. OTP

実装したcallとcastは実はOTPでhandle_call、handle_castとして提供されて おり、実際に gen.erlとgen_server.erlのコードを解説していただきました。

  1. LinkとSupervision Tree

最後にLinkを使ったプロセス監視とそのツリーについて説明がありました。こ れがほぼ標準で入っているあたりこそがErlangをErlangたらしめている部分な のだろうな、と実感しました。

Q and A

なんかわりとぼくばっかり質問させてもらいました。下手な英語ですいません。

Q: ApplicationとProcess、機能を追加する際の使い分けは

A: 機能を追加するならApplication、機能を改善していくならProcess

Q: 日本語を文字列として使える?

A: そのまま使えるよ。

Q: init/0はexportしなくてもいいのでは?

A: 通常?MODULEを使う。その場合必要

あとはカジュアルな質問としては以下の質問もしました。

Q: nine ninesってどういう意味?

A: 99.9999999%の可用性

資料

有料トレーニングだったのですが、スライドとソースコードが以下で公開され ています。

スライド

http://ninenines.eu/talks/thinking_in_erlang/thinking_in_erlang.html

ソースコード

https://gist.github.com/essen/6970232

とはいえ、スライドに書かれていないことも多かったです。

まとめ

一日だけではありましたが、Erlangのエッセンスが詰まった密度の濃いトレー ニングでした。パターンマッチからRecursionに行き、Message Passingから callとcast、そしてOTPへ、という流れは滑らかで、分かりやすかったです。 個人の感想として、非常に満足感が高かったです。

スポンサーのVOYAGE GROUPさん、Bashoさん、そして主催の時雨堂さん、ありがとうございました。

Comments

comments powered by Disqus