【新・言語進化論】次にくる!新登場言語
第4回:並列処理が可能な関数型言語「Erlang」
著者: オープンソース・ジャパン 須藤 克彦
公開日:2007/11/26(月)
「Erlang」は並列処理が可能な関数型言語だ!
最終回の今回は、最近注目されている関数型言語「Erlang」について、そのプログラミングの特徴とErlangが持っている重要な機能を例をみながら説明する。ソースコードを中心に解説していくが、細かい部分まで理解しようと考えず、他のプログラミング言語との違いを感じ取っていただきたい。
「Erlang(アーラン)」はエリクソン社が開発し、1998年にオープンソースとして公開した並列処理が可能な関数型言語だ。本連載の「第1回:今勉強したい関数型言語『Haskell』」でも触れているが、関数型言語とは「ラムダ算法をプログラミング言語として実現したもの」と定義されている。
ここで「ラムダ算法とは何か?」という疑問を持つ人もいるだろう。ラムダ算法とは「数理論理学や計算理論の抽象的な計算体系」のことだが、言葉だけでそれを理解するのは難しいだろう。そこで実際にErlangを使いながら、ラムダ算法とは何かについてみていこう。
Erlangについての情報は、公式Webサイト「http://www.erlang.org/」にまとめられている。こちらのWebサイトからモジュールやドキュメントのダウンロードが可能で、原稿執筆時点では2007年6月13日にリリースされたバージョン5が最新版となっている。
なお、ラムダ算法など計算理論についてより詳しく学びたいという方は、LISPに関するWebサイトや書籍を参考にすると良いだろう。
本記事では、ErlangのMac OS X用の最新版をコンパイルし、Mac OS Xのターミナルでbashを使って起動した場合を基に解説している。なお、公式サイトではWindows用バイナリなども公開されている。
リスト1:Erlangシェルを起動
$ erl
Erlang (BEAM) emulator version 5.5.5 [source] [async-threads:0]
[kernel-poll:false]
Eshell V5.5.5 (abort with ^G)
1>
リスト2:変数Xに10を代入
1> X = 10.
10
リスト3:エラー画面
=ERROR REPORT==== 18-Nov-2007::08:00:42 ===
Error in process <0.30.0> with exit value: {{badmatch,11},[{erl_eval,expr,3}]}
** exited: {{badmatch,11},[{erl_eval,expr,3}]} **
まず、「erl」コマンドを実行すると対話型の「Erlangシェル」が起動し、Erlangのバージョンと指示待ちのプロンプトが表示される(リスト1)。このプロンプトから「X = 10.」と入力し、Enterキーを押す(リスト2)。これは、他のプログラミング言語同様、Xという変数に10を代入したことをあらわす。なおErlangでは「変数の先頭は大文字のアルファベットでなければならない」というルールが存在する。
そのままの状態で、同じ変数に別の値を代入しようとした場合に、通常なら「X = 11.」と指定するように思うはずだ。しかし実際にこれを実行すると、リスト3のようなエラーが表示されてしまう。
これは、実は「『=』は『代入を行う』」という説明が間違っているためだ。Erlangにおける「=」は、他のプログラミング言語のように「変数に値を代入する」のではなく「変数に値を結びつける」意味を持つ。
「どちらも同じなのではないか」と考えるかもしれないが、ラムダ算法ではこれを「ラムダ束縛(lambda binding)」と呼び、明確に分類している。ここでは「Erlangでは一度値が代入(束縛)された変数の値を変えることができない」と覚えておくとよいだろう。 次のページ