= Travelogue Erlang = <<TableOfContents()>> <<BR>> == 端書 == プログラミング言語の構造には様々な種類が存在する。<<BR>> 一例を挙げると、皆さんが最初に触れるかもしれないC言語の様な「手続き型言語」。<<BR>> これと対になるのが、今回皆さんに紹介したいErlangの様な「関数型言語」である。<<BR>> <<BR>> 関数型言語は、処理の過程で変数は変化しない。つまり、定数と化す。<<BR>> また、for文の様なループ構文も存在しない。<<BR>> 全ての処理は再帰を用いて関数を呼び出す事で行う。<<BR>> <<BR>> これを書き記す大きな理由としては、実際に文字として残す事で理解を深めたいという事がある。<<BR>> また、皆さんの中に関数型言語、特にこのErlangについて興味を持つ方が現れて欲しいという願望もある。<<BR>> 手続き型言語を深く極めた方々にとっては、関数型言語は酷く理解不能な構造かもしれない。<<BR>> 然し、浅く触れた方々であれば、C言語等の呪縛に囚われていない。<<BR>> それら手続き型言語との違いを理解しながら特に気にせず学習出来るのかもしれない。<<BR>> 始めるのに遅いは無い。さぁ、始めよう。<<BR>> <<BR>> これを書き記すにあたって、参考とする予定の文献を以下に示す。興味があれば購入するのも良いだろう。 * Francesco Cesarini, Simon Thompson, 訳:佐藤 嘉一. 2010.『Erlangプログラミング』. O'Reilly Japan. <<BR>> * 柏原正三. 2007. 『プログラミング言語Erlang入門』. 株式会社アスキー<<BR>> <<BR>> == Erlangの利点 == 先ずは、次の文章を見てもらいたい。<<BR>> {{{#!wiki important Your Erlang program should just run N times faster on an N core processor. <<BR>>(By Joe Armstrong) }}} Erlangは、マルチコア化しつつあるCPUの性能を最大限に引き出すことの出来る言語である。<<BR>><<BR>> -> (何故マルチコア化しつつあるかというのは聞きかじりなのだが、クロック数の限界が見えたからである。<<BR>> -> クロック数を単純に上げたいのであれば電子回路をより小さくする必要があるらしいが、そう簡単にはいかない。<<BR>> -> また、Heisenbergの不確定性原理から Δt * ΔE = h ≒ 6.63 * 10^(-34) と出来る。<<BR>> -> ここでΔtにクロック数[Hz = 1/s]の逆数を入れてやり、ΔEにはPCの消費電力[W]を入れてやる。<<BR>> -> 上の式を書き換えると、Δt = h / ΔE となり、クロック数を上げるなら、電力を上げる必要がある。<<BR>> -> 電力の上限はある程度決まっているだろうから、クロック数もある程度までしか上がらないのかもしれない)<<BR>><<BR>> OS非依存というのも、素晴らしい特徴の一つだ。<<BR>> また、大規模メッセージ処理システムを数年に渡って動作させ、ダウンさせられないのであれば、<<BR>> 迷わずにシステム構築にはErlangを使うと言った人も居る。<<BR>> [[http://blip.tv/file/1137125|OSCON 2008: Tim Bray, Sun Microsystems: "Language Inflection Point"]] <<BR>>12:30付近にて述べている。 <<BR>> 現在、気付かぬ内に我々はErlangの恩恵を受けているかもしれない。<<BR>> 意外と身近なサービスのシステムもそれによって構築されている。以下に例を挙げる。<<BR>> * Facebookのチャットや、Twitterのメッセージ処理 ([[http://www.ejabberd.im/|ejabberd]])<<BR>> * Amazon EC2の一部としてデータベースサービスを提供している<<BR>> * 非SQLでドキュメント指向なデータベース ([[http://couchdb.apache.org/|Apache CouchDB]])<<BR>> <<BR>> 歴史は15年程度と浅く、更に知名度は低い。<<BR>> 然し、並列指向であり、ホットスワップ可能な障害耐性に長けた言語である。<<BR>> そしてなにより、Erlangは関数型言語の一つの成功型でもある。<<BR>> <<BR>> といった利点ばかり挙げたが、やはり知名度の無さは残酷な現実を我々に突き付ける。<<BR>> 検索すればある程度は出てくるが、本当に知りたい情報が出て来ない可能性がある。<<BR>> 出たとしても、英語である可能性は極めて高い。だが、情報があるだけマシなのかもしれないが。<<BR>> 初心者向けの参考書籍も、思った以上に少ない。大抵は、CやC++、Java、Ruby等の経験が前提として書かれている。<<BR>> 最近は知名度が上がってきたのか、比較的分り易い解説がネット上に増えている。<<BR>> Search and Destroy. ググれよ、さすれば与えられん。<<BR>> 些細なバグはすぐに直せるだろう。<<BR>> <<BR>> == 基本的な用語 == タプル、アトム、ブール、パターンマッチングなどなど