TOPシステム開発> 【新・言語進化論】次にくる!新登場言語> 第4回:並列処理が可能な関数型言語「Erlang」 (1/3)

【新・言語進化論】次にくる!新登場言語

【新・言語進化論】次にくる!新登場言語

第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では一度値が代入(束縛)された変数の値を変えることができない」と覚えておくとよいだろう。 次のページ




ether
著者プロフィール
著者: オープンソース・ジャパン株式会社 須藤 克彦
技術部 教育ビジネス担当部長
CやFORTRANコンパイラなどの言語処理系の設計・開発に約10年間従事。その後ユーザ系企業でUNIXによるクラサバの設計・開発を主導。同時に企業の内外で人材育成に注力する。現在はオープンソースソフトウェアの普及と教育のため OSS に関する教育事業を企画する傍ら、神戸情報大学院大学で講師として教鞭をとる。「ソフトウェア工学の基礎を勉強してオールラウンド・プレーヤーを目指せ」が技術者育成についての口癖。


INDEX
第4回:並列処理が可能な関数型言語「Erlang」
「Erlang」は並列処理が可能な関数型言語だ!
  Erlangのデータ型で特徴的な「リスト」
  Erlangの重要技術「並列処理」