Erlangは、スケーラブルでフォールトトレラントなシステムを構築するために設計された関数型プログラミング言語で、特に同時実行性のある分散アプリケーションの分野で使用されます。1980年代後半にエリクソンによって堅牢な通信システムを作成するために開発されました。Erlangのユニークな特徴には、軽量プロセスのサポート、メッセージパッシングによる同時実行性、ホットコードスワッピング、そして信頼性への強い重点が含まれます。今日では、通信、メッセージングアプリケーション、データベースシステムなど、高可用性と分散システムを必要とする業界で広く使用されています。
Erlangは1980年代後半にジョー・アームストロング、ロバート・ヴァーディング、マイク・ウィリアムズによってエリクソンで創造され、主に通信業界のニーズに応えるために開発されました。この言語は、大規模でフォールトトレラントなシステムを構築し、同時に複数の通話や接続を管理できるようにするために開発されました。
1990年代初頭、エリクソンはErlangの通信以外での可能性を認識しました。1998年にはErlangがオープンソースとしてリリースされ、より広い開発者コミュニティがその成長に貢献できるようになりました。オープンソース運動は、Erlangコードを実行するBEAM仮想マシンの開発につながり、その後他の言語をサポートするように進化しました。
Erlangは現在、Erlang/OTPチームによって維持されており、専用のコミュニティがあります。Erlangのリリースサイクルはより一貫性を持つようになり、パフォーマンス、新機能、強化されたドキュメントに焦点を当てた定期的な更新と改善が行われています。この言語はまた、Erlang VM上で動作し、その多くの原則を取り入れつつ追加機能を提供する現代のプログラミング言語Elixirの開発にも影響を与えました。
Erlangは主に関数型言語であり、関数は第一級市民であり、変数のように渡すことができます。
double(X) -> X * 2.
Erlangの軽量プロセスは、重大なオーバーヘッドなしに数千の同時プロセスを作成することを可能にします。
spawn(fun() -> io:format("プロセスからのこんにちは!~n") end).
Erlangのプロセスはメッセージパッシングを使用して通信し、共有状態なしで安全な通信を可能にします。
Pid = spawn(fun() -> receive
{msg, Content} -> io:format("受信: ~s~n", [Content])
end end),
Pid ! {msg, "こんにちは!"}.
Erlangはパターンマッチングを使用しており、明確で簡潔なコードを可能にする強力な機能です。
match(X) when X > 0 -> io:format("正の数: ~B~n", [X]);
match(X) -> io:format("非正の数: ~B~n", [X]).
Erlangは「クラッシュさせることを許可する」という哲学を通じてフォールトトレランスをサポートし、プロセスが失敗してもシステムに影響を与えずに再起動できるようにします。
start_process() ->
spawn(fun() -> crash() end).
Erlangは、開発者が実行中のシステムでコードを変更できるようにします。
%% 古いバージョン
-module(example).
-export([hello/0]).
hello() -> io:format("古いバージョン~n").
%% 新しいバージョン
-module(example).
-export([hello/0]).
hello() -> io:format("新しいバージョン~n").
Erlangのデータは不変であり、バグが少なく、コードの理解が容易になります。
List = [1, 2, 3],
NewList = [4 | List].
Erlangには、異なるノード間でプロセスを簡単に分散させる機能があります。
net_adm:start() ->
net_adm:ping('other_node@hostname').
Erlangは構造化データ型を作成するためのレコードタイプをサポートしています。
-record(person, {name, age}).
Person = #person{name="アリス", age=30}.
Erlangはリスト内包表記を使用して、リストを簡潔に生成および操作できます。
Squares = [X*X || X <- [1,2,3]].
Erlangは、同時実行性とフォールトトレラントなアプリケーションを実行するために設計されたBEAM仮想マシン上で実行されます。BEAMはパフォーマンスを最適化し、ホットコードスワッピングのような機能を可能にします。
Erlangのための開発環境はいくつかあり、EmacsやIntelliJ IDEA(Erlangプラグイン付き)が最も人気があります。他にもErlang専用のエディタであるErlideなどの注目すべきツールがあります。
Erlangプロジェクトを作成するには、従来rebar3
ツールを使用して依存関係を管理し、ビルドします。たとえば、新しいプロジェクトを作成するには、次のコマンドを実行します。
rebar3 new app myapp
次に、プロジェクトをビルドするには、次のコマンドを実行します。
rebar3 compile
Erlangは通信、メッセージングシステム、リアルタイムアプリケーションで広く使用されています。注目すべきアプリケーションには以下が含まれます:
Erlangの主な強みは、その同時実行モデルとフォールトトレランスにあり、以下の言語と比較して際立っています:
Erlangへのコードの翻訳は、その独自のパラダイムのために複雑になることがあります。特定の翻訳のためにerl2cpp
のようなツールが存在しますが、すべての言語に対する広範な自動ツールは存在しません。手動翻訳には以下が含まれる場合があります: