Erlang(アーラン)とは、近年再評価されて注目を集めている関数型プログラミング言語です。
本書は、並行プログラミングに有効な言語として急速に一般にも認知され始めたErlangのバイブル的な解説書を翻訳するもの。
原著者はErlangの初期の頃からの開発者の一人。
我々が暮らすこの世界は並列に動いている。
実世界に存在する他のものと同じように振る舞うプログラムを書きたかったら、プログラムも並行構造になることだろう。
並行アプリケーションを書くために設計された言語を使えば開発はすごく簡単になる。
Erlang のプログラムがモデル化しているのは、我々が考えたりコミュニケーションする様なのだ。
Joe Armstrong
訳者序文
本書を手に取ったあなたがプログラミングをゼロから学ぼうという人ならば、非常に幸運だ。なぜなら、現在主流のC++ やJava といった言語の概念にとらわれることなく、シンプルでありながら強力なプログラミング言語を学べるからだ。あなたがプログラミングの経験者でも同様に幸運だ。なぜなら、これまでのプログラミングの経験に加えて、Erlang というすばらしい道具を活用できるようになるからだ。
さて、近年のWeb をベースとしたシステムの発展は、これまで通信機器など高可用性を重視する用途以外ではあまり知られていなかったErlang に新たな注目を浴びせることになった。Webは基本的に開かれたシステムであるため、比較的簡単にサービスを構築して公開することができる反面、大量のアクセスをさばかなければならない状況も起きやすい。いわゆるC10K 問題である。10K = 10000 個のクライアントからのアクセスをいかにして切り回すかはいまや多くのエンジニアの頭を悩ます問題となっている。C10K 問題は20 世紀の間に提起されていたのだから、それからさらにWeb が発展した現在ではどのような状況であるかは推して知るべしである。
前述のC10K のサイトを見てもわかるように、その解決策はマルチスレッドプログラミングを駆使した煩雑なものが多い。これでは本来提供したいサービスのことを考えるための余裕がなくなってしまう。また、オペレーティングシステムが提供するスレッド環境はコストが高いものが多く、クライアント1 つにスレッドを1 つ割り当てるような贅沢な使い方ではとても10000 個のクライアントをさばくことなどできない。
Erlang ならばそんな贅沢もまったく問題ない。余計なことを考えずにサービスを作ることに集中できるのだ。
また、処理能力を増やすためのハードウェア側からのアプローチとしては、従来は駆動クロックの高速化が一般的であった。しかし、主に熱の問題から現在の半導体の駆動クロックは数GHz で頭打ちになると考えられているため、その代わりに処理装置を増やす方向、つまりマルチプロセッサ化やマルチコア化に拍車がかかっている。ここ数年でマルチプロセッサやマルチコアのマシンは個人でも手に入れられるようになってきたが、その上で動作するソフトウェアの方はまだまだハードウェアを生かしきれていないのが実情だ。
では、どうすれば並列ハードウェアを生かしたソフトウェアを作ることができるのだろうか? 一般には、pthread などに代表されるいわゆるマルチスレッドプログラミングのためのライブラリやフレームワークを使うことが多いだろう。しかし、競合条件を正しく見極めて排他制御を正しく適用するのはなかなか難しく、熟練したプログラマでさえも間違いを犯しがちだ。実際、訳者もマルチコアマシン用のオペレーティングシステムを開発しているが、それでも自分自身がその手の同期バグを仕込んでしまうことがあるし、もっと注意深い人々でもミスは皆無ではない。
人間は誰でもちょっとした間違いをしてしまうものだから、ここはコンピュータの方でなんとかすべきところだ。残念ながら、C やC++、Java、それにPerl やRuby、Scheme などの言語には、そのような間違いをしないような仕組みは備わっていない。後付けの仕組みや実験的な取り組みはあるが、実用的ではなかったり、実績に乏しい。その点、Erlang はもともと並列処理を念頭に置いて設計されているから、変数の排他制御の問題などは本質的に存在しない。それはErlang が関数型プログラミング言語の特徴をうまく生かしているからだ。関数型プログラミングというと身構えてしまう人もいるかもしれないが、実はそんなに難しくない。それどころか、プログラムは命令型プログラミング言語で書かれたものよりもずっとわかりやすい。実のところ、Erlang は関数型プログラミング言語の中でも文法がとっつきやすく、関数型プログラミングの入門にも適している。
ところで、並列指向プログラミングはErlang の最も大きな特徴だが、実はErlang の強みはそれ以外にもある。「関数型」でしかも「並列指向」と来れば、研究室を出たことのない、実績に乏しいプログラミング言語であるかのような印象を抱く人もいるかもしれない。しかし、Erlang には20 年を超える歴史があり、高度な信頼性が要求される通信機器の分野でも実績がある。そのような実績はもちろんErlang の基本設計の見通しの良さによるところも大きいが、忘れてはならないのはOTP というフレームワークの存在である。詳しくは本書の後半の解説に譲るが、OTP は信頼性の高いシステムを作るためのノウハウがつまっている。大規模なシステムを構築し、長年にわたって更新しつつ運用していくためのいわばデザインパターンと言える。また、本書で取り上げているのはOTP のごく一部でしかなく、そのほかにも実際のシステム構築において培われた興味深い機能があるので、本書の次のステップとして覗いてみるのもよいのではないだろうか。
Erlang は歴史のある言語だが、今現在も進化を続けている。本書はErlang OTP R11B5 というリリースを元にしているが、本書発行の時点で既に次のR12B0 というリリースが出ている。今回のリリースは以前のリリースとの互換性を保っているので、本書で解説していることはそのまま通用するはずである。ただし、R12B0 ではエラーメッセージがわかりやすいように変更されているため、エラーメッセージについてはかなり異なる部分がある。
なお、本書の翻訳にあたって、誤解を生じない範囲であえて用語の統一を図らなかった部分がある。原著でも読みやすさを優先して1 つの概念をいくつかの言葉で言い換えており、翻訳でもその方針に従っている。特に、並列(parallel)と並行(concurrent)は厳密にはそれぞれ異なる概念を指す言葉であるが、原著同様統一していない点に注意されたい。
最後に、多忙な中で本書をレビューし、有益なコメントをくださった平岡和幸、檜山正幸、堀玄、向井淳の各氏にこの場を借りてお礼を述べさせていただきます。また、オーム社開発局の方々にも各面でのサポートをいただき、感謝しております。その他、ここで逐一お名前を挙げることはできませんが、さまざまな方からのご協力の下に本書を作ることができました。ありがとうございました。
2008年2月
榊原一矢
登録情報
|
|
あなたの意見や感想を教えてください:
|
||||||||||||||||||||||
|
最も参考になったカスタマーレビュー
41 人中、39人の方が、「このレビューが参考になった」と投票しています。
5つ星のうち 5.0
Erlangならこの本が一番,
By
レビュー対象商品: プログラミングErlang (単行本(ソフトカバー))
つい3ヶ月ほど前、アスキーから「プログラミング言語Erlang入門」という本が出て、「入門としては良い、Joe Armstrongの良い本があるのだが、翻訳されていないので」等とレビューを書いていたのだが、その本が翻訳された。並列処理と分散処理に特徴を持つが、分かりにくいとされる言語仕様を余すところなく紹介している。また、およそErlangで出来ることを簡単なものから複雑なものまで多数の例を挙げており、一番の特徴であるネットワークやデュアルCPUでのプログラミングなど何でも分かるだろう。 訳も優れており、原著の雰囲気そのままに、読みやすくユーモアにあふれた語り口になっており飽きさせない。 Erlangに興味を持った人全てに文句なしに勧められる本だ。
11 人中、8人の方が、「このレビューが参考になった」と投票しています。
5つ星のうち 5.0
前準備とMacでの工夫,
By Zsrtra (台湾台北) - レビューをすべて見る
レビュー対象商品: プログラミングErlang (単行本(ソフトカバー))
文句なしに、現時点での最強のErlang解説書。Erlangの強みである並列化と分散化を“存分”に体験、学習および利用するためには、ある程度の準備が要求されます。最低二台のコンピュータで構成されるネットワーク環境に加え、DNSがあると助かります。 ただ、分散プログラミング部分にあたって、私のMac OSX 10.4は本の通りに上手くいきませんでした。もし、私と同じところで躓いたら、下記を参考にしてみてください。 1)ローカルホストでの分散の場合は、“erl -sname gandalf”でerlang環境を立ち上げるようにと書いてありますが、“erl -sname gandalf@localhost”にします。明確に'@localhost’を記入するということです。 2)DNSなしでマシン間の分散の場合は、"erl -name gandalf@xxx.xxx.xxx.xxx -setcookie abc" に改めて立ち上げると問題が解決します。ここのxxx.xxx.xxxは使用中のマシンのIPアドレスのことで、たとえば 192.168.1.1 などがそうです。
7 人中、5人の方が、「このレビューが参考になった」と投票しています。
5つ星のうち 5.0
めちゃくちゃいいです!,
By ばななふぃっしゅ (埼玉県) - レビューをすべて見る
レビュー対象商品: プログラミングErlang (単行本(ソフトカバー))
私はこういった関数型言語については全然馴染みがなかったので、最初は非常に読みづらかったですが、それは書籍の問題ではなく、言語仕様というか文法や考え方の問題であって、内容は非常に良いです。特にこの後、F#に関する本を読んだのですが、F#に比べると非常に言語仕様がシンプルで、並行プログラミングも分散プログラミングも区別することなく同じように書けるし、堅牢でミッションクリティカルなアプリケーションにはぴったりの言語です。 書籍の内容も読めば読むほど味が出る内容で、Erlangの安定性を支えるOTP(Open Telecom Platform)を使った定石アプリケーション構築の説明やアプリケーションを可動させたまま、実行コードを変更するホットスワッピングなどについても丁寧に説明されています。 プログラマたるもの、いろいろな言語に触れてみる必要があると思いますが、これは必読、お勧めの名著だと思います。
あなたの意見や感想を教えてください: 自分のレビューを作成する
|
|
|
|
|