Erlang(
アーラン)は、並行処理指向の
プログラミング言語であり、特に分散システムやリアルタイム処理において優れた能力を発揮します。オープンソースで提供されており、その柔軟性と堅牢性から、多くの企業やプロジェクトで採用されています。
Erlangの概要
Erlangは、関数型言語のパラダイムに基づいています。関数型言語の特徴として、変数の再代入ができないこと、先行評価を行うこと、そして動的型付けであることが挙げられます。これらの特徴は、コードの予測可能性を高め、並行処理における複雑さを軽減するのに役立ちます。
Erlangは、
エリクソン社によって、以下のようなシステム構築を目的として設計されました。
分散環境での動作
障害耐性(フォルトトレラント)
ある程度のリアルタイム性
無停止稼働
ホットスワップ(システム稼働中のプログラム変更)
当初はエリクソン社内で使用されていた技術でしたが、1998年にオープンソースとして公開されました。エリクソンの実装にはインタプリタとコンパイラ(HiPE)が含まれています。ただし、HiPEはすべてのプラットフォームで利用できるわけではありません。
Erlangでは、並行処理が開発者にとって非常に明瞭であり、マルチスレッド処理における複雑さを大幅に軽減できます。これは、Erlangが提供するプロセス管理の仕組みが、他の多くの言語に比べて簡潔で理解しやすいからでしょう。
Erlangの名前の由来
Erlangの名前は、数学者のアグナー・アーランに由来しています。しかし、エリクソン社内で頻繁に使用されていたため、「Ericsson language」にちなんで命名されたという説もあります。当時、エリクソンのコンピュータ科学研究所の所長であったビャーネ・デッカーは、この名前の二重性について意図的なものだと述べています。
関数型言語としてのErlang
Erlangのソースコードの例として、クイックソートのアルゴリズムの実装を見てみましょう。
erlang
qsort([]) -> [];
qsort([Pivot|Rest]) ->
qsort([ X || X <- Rest, X < Pivot])
++ [Pivot]
++ qsort([ X || X <- Rest, X >= Pivot]).
このコードは、関数`qsort`の再帰呼び出しを使用してソートを行います。再帰呼び出しは、ソート対象がなくなるまで続きます。リスト内包表記を用いることで、リストの操作を簡潔に記述できます。
Erlangでは、異なるデータ型間での比較も容易に行えます。例えば、`1 < a`のような式も`true`として評価されます。ただし、比較の順序を変更したい場合は、独自の比較関数を定義することも可能です。
並行処理と分散処理
Erlangの最大の特長は、並行処理の強力なサポートです。Erlangでは、多数の軽量な「プロセス」を生成し、それらの間でメッセージをやり取りすることで並行処理を実現します。この「プロセス」は、OSのプロセスやスレッドとは異なり、Erlang VMによって管理されます。
プロセス生成のオーバーヘッドが非常に小さいため、数百万ものプロセスを同時に実行してもパフォーマンスの低下を最小限に抑えることができます。あるベンチマークでは、2000万個のプロセスを並行実行することが示されています。
プロセス間の通信は、非共有の非同期メッセージ転送システムによって行われます。各プロセスは独自の「メールボックス」を持ち、受信したメッセージはそこに格納されます。プロセスは`receive`操作でメールボックスからメッセージを受け取り、パターンマッチングによってメッセージを処理します。
Erlangでは、整数、浮動小数点数、文字、アトム、タプル、リスト、そして関数など、あらゆるデータ型をメッセージとして送ることができます。
さらに、Erlangは分散処理もサポートしており、異なるノード(コンピュータ)に分散したプロセス間での通信を透過的に行うことができます。プロセスはリモートノードに生成でき、ローカルプロセスと全く同じように通信できます。
Erlangの並行処理におけるエラー処理の仕組みも優れています。あるプロセスが異常終了した場合、そのプロセスを監視しているプロセスにメッセージが送信され、適切なエラー処理を行うことができます。これにより、システムの信頼性と保守性が向上します。
Erlangの配布と採用事例
Erlangは、1998年にエリクソンによってオープンソースとして公開されました。これにより、特定の企業への依存を避け、Erlangの認知度を高めることを目的としています。
Erlangの配布形式は、ライブラリとリアルタイムデータベース「Mnesia」を含めたOpen Telecom Platform (OTP) として提供されています。エリクソンやいくつかの企業が商用サポートを提供しています。
Erlangは、ノーテル・ネットワークス、ティー・モバイル、ドイチェ・フルークズィヒャルングなど、多くの企業で採用されています。特に、大規模な分散システムや高可用性が求められるシステムでその強みを発揮します。例えば、エリクソンではAXD301 ATMスイッチなどのプロジェクトでErlangが採用されています。
近年では、WhatsApp、ドワンゴ、LINE、任天堂など、幅広い分野でErlangが利用されていることが明らかになっています。現在も活発に開発が続けられており、定期的に新しいリリースが公開されています。
Erlangは、UNIX系オペレーティングシステムやWindows上で利用可能です。
Erlangの関連技術
Erlangに関連する技術として、以下のようなものがあります。
並行計算
アクターモデル
ガード(プログラミング)
Concurrency and Coordination Runtime
ejabberd (XMPP/Jabberインスタントメッセージング
サーバ)
Yaws (高性能ウェブサーバ)
Riak (NoSQL
データベース)
* Tsung (高性能
ベンチマークツール)
これらの技術と組み合わせて、Erlangはより強力なシステムを構築することができます。
まとめ
Erlangは、並行処理と分散処理に特化した
プログラミング言語として、その独特な設計思想と強力な機能により、多くの開発者から支持されています。関数型言語としての特性、軽量な
プロセスの管理、メッセージベースの通信など、Erlangならではの魅力的な特徴が多くあります。その採用事例は多岐にわたり、今後もますますその活躍が期待されるでしょう。