Programming Erlang購入検討

自分用メモ。

wrong, rogue and log : Programming Erlang

この本は、とても良く書けていて、わかりやすい。Erlang言語入門本というよりはコンカレンシーの実装入門本及びOpen Telecom Platform(OTP)入門本であるところが素晴らしい。そう、Erlangの強みはなによりも軽量プロセスとOTPの実装にあるのだから。 サンプルで、SHOUTcastプロトコルを用いたストリーミングサーバーを作ったり、ギガバイトを超えるデータを扱えるインデックスサーバーと検索サーバーを作ったりしていて、とても面白い。OTPとMnesiaの簡単な入門もある。最後の章はMapReduceだし。

Programming Erlang, 一章 はじめに - 初学者の箸置

まずはerlangをわざわざ勉強するべき5つの理由が書いてある。

  1. マルチコアを生かしたプログラミング -- 20.3章でやるらしい
  2. フォールトトレラント(耐故障性)  -- 16.1章にて、「サービスを止めずに更新できるサーバ」というお題で遊ぶらしい。
  3. 関数言語の有効性をテストできる -- ほう。
  4. 実際の大規模製品で揉まれた言語。すばらしいライブラリとユーザコミュニティの存在 -- ほう。OpenTelecomPlatformというライブラリのことをいっているようだ
  5. コードを短くできる。 -- あそう。

Erlangを学ぶ(15)(最終回) - jj1bdx: life beyond Japan (now closed)

並列化と実行時間に関する考察

実験をひととおり終えて確認できたことは以下の通りである.

  • 処理時間の短い関数を並列化するとオーバヘッドが目立つ.1つのプロセスにはある程度まとまった量の計算をさせたほうが効率が良い.
  • プロセスはあまりたくさん作るとオーバヘッドが無駄に発生してしまう.
  • プロセスの個数を制限し,使えるノードやCPUの個数に応じた数にすれば,それぞれの能力を活かして高速化ができる.
  • mapの場合,逐次実行でテストを行ってから並列化できるので,デバッグは比較的しやすい.
  • 単一ノードから分散Erlang (distributed Erlang) への拡張は,あらかじめrpcモジュールを使う形で書いておけば,コードそのものの大きな変更は伴わずにできる*1
  • Tupleやリストを活用すれば小さくコードをまとめることができる.結果を表示したりファイルに落とす際は,一度文字列,つまりbinaryにしてしまうのが効率的で良い.

これらはすべてProgramming ErlangErlang Reference Manualで述べられている通りの結果だが,実機で動かして確認することによって,より深く理解を進められたように思う.