Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Erlangとは? わかりやすく解説

アーラン【Erlang】

読み方:あーらん

トラフィック通信回線設備利用に関する国際単位の一。呼量単位時間あたりの単位回線占有量)を表す。単位時間あたりの平均使用回数平均占有時間の積でも表される。名称は、通信トラフィック工学創始知られるデンマーク数学者アーラン(Agner K.Erlang)にちなむ。ERLまたはerlとも表記する


アーラン

【英】erlang, ERL

アーランとは、通信回線におけるトラフィック量の国際単位のことである。「ERL」と表記される平均通話時間とともにトラフィック理論用いられている。

回線利用され時間総量トラフィック量)について、1回線1時間占有した場合通信量が1アーランとなる。ちなみにこの単位は、トラフィック理論の提唱者アーラン(A.K.Erlang)の名に由来している。

通信事業のほかの用語一覧
通信回線:  ADSL  アナログ回線  アナログポート  アーラン  遠隔処理  Ethereal  バス配線

Erlang

名前 アーラン

Erlang

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/02/07 16:46 UTC 版)

Erlang
Erlangのロゴ
パラダイム 宣言型プログラミング関数型プログラミング並行計算、マルチパラダイムプログラミング 
登場時期 1986年 (39年前) (1986)
開発者 ジョー・アームストロングエリクソン、Robert Virding 
最新リリース 27.2.2/ 2025年2月6日 (40時間前) (2025-02-06)[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エリクソンにより次の条件のシステムを構築できるよう設計された。

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

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]は「 XRestの要素として、XPivotより小さい全てのXを選択する。」と読むことができる。 このようにErlangではリストを非常に簡単に扱うことができる。 Erlangでは異なる2つのデータ型の値の間であらゆる論理式を評価できるため、式の評価は単純である。 例えば、1 < atrueを返す。

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

次のソースコードではリストをリスト要素の長さを基準にしてソートする。

 -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]さえも、メッセージとして扱うことができる。

ソースコードの例を示す。

  Pid=spawn(Mod, Func, Args)       % execute function Func as new process
  Pid=spawn(Node, Mod, Func, Args) % execute function Func in remote node Node
 
  Pid ! a_message      % send message to the process (asynchronously)
 
  receive              % receive message sent to this process
    a_message -> do_something;
    {data, Data_content} -> do_something_else();% This is a tuple of a type atom and some data
    {hello, Text} -> io:format("Got hello message:~s", [Text]);
    {goodbye, Text} -> io:format("Got goodbye message:~s", [Text])
  end.

Erlangでは異なるノード (コンピュータ) に分散した複数のプロセスを互いに連携させて動作させるためのサポートも組み込みで備えている (分散処理) 。 プロセスは遠隔のノードに生成することができ、遠隔ノード上のプロセスとのプロセス間通信は透過的である。 すなわち、遠隔ノード上のプロセスとのプロセス間通信は、同じノード上のプロセスとのプロセス間通信と全く同じように行われる。

Erlangでの並行処理では、エラー処理の基本的な方法をサポートしている。 あるプロセスが異常をきたすと、プロセスは手際良く終了し、そのプロセスを制御しているプロセス (何らかのアクションをとることができるプロセス) にメッセージを送信する。 このエラー処理の方法により、ソースコードの保守性を高め複雑性を低減することができる。

配布

エリクソンErlangオープンソースとして、1998年に公開した。 その意図は、特定企業からの独立性を確保することと、Erlangに対する人々の認知を高めることであった。 ライブラリとリアルタイムデータベースMnesia」と共に配布される Erlangプログラミング言語の配布形式は、Open Telecom Platform (OTP) と呼ばれている。 エリクソンおよび数社の企業は、Erlang技術に対する商用サポートを提供している。

Erlangをオープンソースとして公開する方針を採ってからは、世界中のいくつもの企業によって採用されている。 ノーテル・ネットワークス[注釈 8]、ティー・モバイル[注釈 9]、ドイチェ・フルークズィヒャルング[注釈 10](航空管制を担うドイツの政府組織)などがErlangを採用している[注釈 11]。同社ではこれまで何十ものプロジェクトでErlangを採用してきた。とりわけ大規模なものは非常にスケーラブルな AXD301 ATM スイッチのプロジェクトである。 2014年にはWhatsApp、ドワンゴ、LINEなどがErlangを採用していることを表明し、2019年には任天堂がErlangを採用していることを表明した。[3]

2022年現在、Erlangは活発に開発が続けられており、定期的に新リリースを公開している。 Erlangは、いくつかのUNIXに似たオペレーティングシステムおよびWindows上で使うことができる。

関連項目

ウェブサーバ

  • Tsung英語版 — 高性能なベンチマークツール

脚注

注釈

  1. ^ : integer
  2. ^ : float
  3. ^ : character
  4. ^ : atom
  5. ^ : tuple
  6. ^ : list
  7. ^ : function
  8. ^ : Nortel Networks
  9. ^ : T-Mobile
  10. ^ : Deutsche Flugsicherung
  11. ^ Who uses Erlang for product development?Erlangに関してよく尋ねられる質問集。この資料によるとErlangを最も大規模に採用している組織はエリクソン社である。エリクソン社は電気通信システムの開発にErlangを使っている。

出典

  1. ^ Releases”. GitHub. 2025年2月7日閲覧。
  2. ^ Ulf Wiger (2005年11月14日). “Stress-testing Erlang”. comp.lang.functional.misc. 2006年8月25日閲覧。
  3. ^ https://speakerdeck.com/elixirfest/otp-to-ejabberd-wohuo-yong-sita-nintendo-switch-tm-xiang-ke-hutusiyutong-zhi-sisutemu-npns-false-kai-fa-shi-li

参考文献

外部リンク


Erlang

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/02 16:40 UTC 版)

第一級関数」の記事における「Erlang」の解説

-module(calculus).-export([derivate/2]).% F: 数値受け取り数値返す関数% DeltaX: 小さ正の数% Fの近似導関数返すderivative(F, DeltaX) -> fun(X) -> (F(X + DeltaX) - F(X)) / DeltaX end.

※この「Erlang」の解説は、「第一級関数」の解説の一部です。
「Erlang」を含む「第一級関数」の記事については、「第一級関数」の概要を参照ください。

ウィキペディア小見出し辞書の「Erlang」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Erlang」の関連用語

Erlangのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Erlangのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2025 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【アーラン】の記事を利用しております。
日本オペレーションズ・リサーチ学会日本オペレーションズ・リサーチ学会
Copyright (C) 2025 (社)日本オペレーションズ・リサーチ学会 All rights reserved.
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのErlang (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの第一級関数 (改訂履歴)、糖衣構文 (改訂履歴)、ユニットテスト・フレームワーク一覧 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS