コンテンツにスキップ

Erlang

出典: フリー百科事典『ウィキペディア(Wikipedia)』
Erlang
Erlang
Erlangのロゴ
パラダイム 宣言型プログラミング関数型プログラミング並行計算、マルチパラダイムプログラミング ウィキデータを編集
登場時期 1986年 (38年前) (1986)
開発者 ジョー・アームストロングエリクソン、Robert Virding ウィキデータを編集
最新リリース 26.2/ 2023年12月13日 (6か月前) (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 SoftwareOSS

[]


Erlang1 Erlang



ITFault tolerant





ErlangErlang使1998ErlangHiPEHiPEErlang使

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] XRestXPivotX Erlang Erlang2 1 <atrue

Erlangtruefalse使 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 ErlangErlang(VM) 300 2000[2]

Erlang

Erlang Erlang Erlangreceive 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  () 

配布[編集]


Erlang1998 Erlang Mnesia ErlangOpen Telecom Platform (OTP)  Erlang

Erlang [ 8][ 9][ 10]Erlang[ 11]Erlang AXD301 ATM  2014WhatsAppLINEErlang2019Erlang[3]

2022Erlang ErlangUNIXWindows使

[]






 ()

Concurrency and Coordination Runtime

ejabberd - Erlang使 XMPP/Jabber 

Yaws () - Erlang

Riak -  NoSQL 


脚注[編集]

注釈[編集]

  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を使っている。

[]



(一)^ Releases.  GitHub. 2022720

(二)^ Ulf Wiger (20051114). Stress-testing Erlang. comp.lang.functional.misc. 2006825

(三)^ https://speakerdeck.com/elixirfest/otp-to-ejabberd-wohuo-yong-sita-nintendo-switch-tm-xiang-ke-hutusiyutong-zhi-sisutemu-npns-false-kai-fa-shi-li

[]


Joe Armstrong2003Making reliable distributed systems in the presence of hardware errors (Ph.D.) 

[]




Erlang - 

Erlang World - Erlang