このエントリーをはてなブックマークに追加

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さん、そして主催の時雨堂さん、ありがとうございました。