日本の Erlang な人たちで，ヨーロッパで行われた Erlang Conference の発表をいくつか紹介したら面白いかなと思ったので，やってみます．手始めということで， Erlang eXchange で行われた JoeArmstrong さんのキーノートスピーチを紹介します．Joe Armstrong, "Erlang Keynote: Armstrong on Software: Erlang &SMP," Erlang eXchange 2008, June, 2008.このスピーチでは，Erlang が注目されている理由を簡潔に紹介しています．ややひいき目な感じもしますが，現在のコンピュータ環境で Erlang が選ばれる理由は十分に説明されていると思います．では，内容をかいつまんで紹介します．発表者の Joe さんは，Erlang の生みの親であり，『プログラミングErlang』の著者でもあります．この本には，"Softwre for ConcurrentWorld" というサブタイトルが付けられています．このことからもわかるように，Joe さんは並行性 (concurrency) を重要な特徴と考えているようです．Erlang とマルチコアプロセッサが同じ時期に注目され始めたのは，偶然ではありません．Joe さんの言葉を借りると，「プロセッサのコアが増えるにつれ，並行プログラムは速くなるが，逐次的なプログラムは (相対的に)遅くなる」ためです．理想的には，Erlang を使うと，コアが N あれば N倍速くなります．障害耐性 (fault tolerance) においても，並行性などの Erlang の特徴が有利に働きます．障害耐性を確保するためには，複数のコンピュータからなる分散システムであることが必要です．これらを，message passing による並行プログラムで動作させます．信頼性を高めるには，コンピュータは多いほどよいです．ということは，スケーラブルでなければなりません．結局のところ，障害耐性，分散，並行性，スケーラビリティは切り離せない問題です．Erlang にはこれらが備わっています．並行プログラムには，大きく二つのアプローチがあります．ひとつは，プロセス間に共有メモリを用意する方法です．しかし，あるプロセスが誤ったデータを書き込むと，他のプロセスがクラッシュするかもしれません．また，共有メモリの配置や伝送遅延，lock の問題もあります．データの共有をやめて message passing を採用することで，これらの問題を解決できます．MapReduce もそうですし，なにより人間は messagepassing でコミュニケーションしています．副作用のない関数型言語こそ，このパラダイムの実現に適しています．もちろん，Erlang は関数型言語です．最後に，コード例や，マルチコアプロセッサでの性能グラフが紹介されています．また，テレコムを中心とした利用例も示されています．