Erlang
[Wikipedia|▼Menu]
.mw-parser-output .hatnote{margin:0.5em 0;padding:3px 2em;background-color:transparent;border-bottom:1px solid #a2a9b1;font-size:90%}

この項目では、プログラミング言語のErlangについて説明しています。通信トラフィック量を表す同名の単位については「アーラン」をご覧ください。

ErlangErlangのロゴ
パラダイム宣言型プログラミング関数型プログラミング並行計算、マルチパラダイムプログラミング 
登場時期1986年 (38年前) (1986)
開発者ジョー・アームストロングエリクソン、Robert Virding 
最新リリース26.2/ 2023年12月13日 (5か月前) (2023-12-13)[1]
型付け動的型付け、強い型付け
主な処理系erl
影響を受けた言語MLPrologLISP、PLEX、SmalltalkMirandaAdaModula-2CHILL 
影響を与えた言語ScalaClojureElixir
プラットフォームUnix系WindowsmacOS
ライセンスApache-2.0、Erlang Public License 
ウェブサイトwww.erlang.org
拡張子erl、hrl
テンプレートを表示
LYME is Erlang-based
プログラミング言語>>他のプログラミング言語

カテゴリ / テンプレート

Erlang(アーラン)は、コンピュータにおいて汎用的な用途に使うことができる並行処理指向のオープンソースソフトウェア(英:Open Source Software、略:OSS)プログラミング言語および実行環境。
概要

Erlangの直列処理のサブセットの言語は、関数型言語であり、先行評価を行い、変数への代入は1回限りであり、動的型付けである。Erlangはエリクソンにより次の条件のシステムを構築できるよう設計された。

分散化された環境

障害に耐性をもつ(IT用語における「フォルトトレラント」(英:Fault tolerant))。

ある程度のリアルタイム性を備える

無停止で稼働する

ホットスワップが可能であり、稼働中のシステムを停止すること無くErlangのプログラムを変更することができる。Erlangは、当初はエリクソン社内部だけで使われる非公開の技術であったが、1998年にオープンソースとして公開された。エリクソンによるErlangの実装は基本的にはインタプリタであるが、HiPEというコンパイラも同社の実装に含まれている。ただしHiPEはErlangが動作する全てのプラットフォームで使えるわけではない。

Erlangにおいては、マルチスレッドの処理の並行性はプログラム開発者(プログラマ)にとって明瞭である。これに対し、ほとんどのプログラミング言語においては、マルチスレッドは複雑で誤りを犯しがちな分野である。Erlangで「プロセス」(スレッド) を生成し管理する手法はごく平凡な方法である。
命名

Erlangは数学者アグナー・アーランから名前をとって命名された。一方で、エリクソン社内で非常によく使われたため「Ericsson language」にちなんで命名されたと一部の人々は思っている。当時エリクソンのコンピュータ科学研究所の所長であったビャーネ・デッカーによれば、この名前に関する2重性については意図的なものだとのことである。
関数型言語

Erlangのソースコードの例を示す。 -module(fact). -export([fac/1]). fac(0) -> 1; fac(N) when N > 0 -> N *fac(N-1).

次のソースコードはErlangによるクイックソートアルゴリズム実装である。 %% quicksort:qsort(List) %% Sort a list of items -module(quicksort). -export([qsort/1]). qsort([]) -> []; qsort([Pivot|Rest]) -> qsort([ X||X <- Rest, X < Pivot]) ++ [Pivot] ++ qsort([ Y||Y <- Rest, Y >=Pivot]).

この例では関数qsortの再帰呼び出しを行っている。再帰呼び出しはソート処理の対象が無くなった時点で終了する。[ X||X <- Rest, X < Pivot]は「 XをRestの要素として、XがPivotより小さい全てのXを選択する。」と読むことができる。このようにErlangではリストを非常に簡単に扱うことができる。Erlangでは異なる2つのデータ型の値の間であらゆる論理式を評価できるため、式の評価は単純である。例えば、1 < aはtrueを返す。

ただしErlangにおける戻り値(trueあるいはfalse)を返す基礎的なしくみを変更する必要がある場合には、比較関数を使うことができる。例えば、a < 1がtrueと評価される比較順序により順序付けられたリストが必要な場合などである。

次のソースコードではリストをリスト要素の長さを基準にしてソートする。 -module(listsort). -export([by_length/1]). %% まずby_lengthが実行され 関数fun(A,B)という関数がFに代入されてからqsortが実行される %% qSortは大小の比較関数としてby_lengthで定義したSmallerつまりFを使っている by_length(Lists) -> F=fun(A,B) when is_list(A), is_list(B) -> length(A) < length(B) end, qsort(Lists, F). qsort([], _) -> []; qsort([Pivot|Rest], Smaller) -> qsort([ X||X <- Rest, Smaller(X, Pivot)], Smaller) ++ [Pivot] ++ qsort([ Y||Y <- Rest, not(Smaller(Y, Pivot))], Smaller).
並行処理指向で分散処理指向の言語

Erlangの主な特長は、並行処理のサポートである。Erlangにおける並行処理は、複数の「プロセス」を生成し、それらの間で通信を行うための、簡潔で強力な機能群によって支えられている。なお、Erlangが提供する「プロセス」は、オペレーティングシステムが提供するプロセススレッドとは異なり、Erlangの仮想機械(VM)によって管理される。「プロセス」の生成オーバーヘッドは約300ワード程度に抑えられており、大量の「プロセス」を、性能を低下させずに生成できる。あるベンチマークでは2000万個の「プロセス」を並行実行できることが示された[2]

これ以降の記述ではErlangにおける「プロセス」を括弧無しで言及する。

Erlangにおけるプロセス間の通信は、非共有かつ非同期のメッセージ転送システムによって行われる。Erlangのプロセスは全てそれぞれの「メールボックス」をもつ。メールボックスには他のプロセスから受信したメッセージが格納される。その後、メールボックスに格納されたメッセージがメールボックスを所有するプロセスによって処理される。そのときErlangのプロセスはメッセージを得るためにreceiveという基本操作を行う。メッセージを得る過程ではパターンマッチングが行われる。まずメッセージ制御ルーティンが1番目のメッセージに対して各パターンがマッチするかどうか調べる。2番目以降のメッセージに対しても同様のことを行う。マッチングは、マッチするメッセージに出会うまで行われる。メッセージが処理されると、メッセージはメールボックスキューから除去され、プロセスは復帰して続きの処理を行う。Erlangの構成要素は何であれメッセージとして使うことができる。Erlangの基本要素である整数[注釈 1]浮動小数点数[注釈 2]、文字[注釈 3]、アトム[注釈 4]も、またタプル[注釈 5]リスト[注釈 6]、さらには関数[注釈 7]さえも、メッセージとして扱うことができる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:29 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef