リ゜ノァスクのアヌラン、パヌト2-質問ぞの回答

この蚘事は、Erlang / Erlangプログラミング蚀語ずRisovaskaプロゞェクトでの䜿甚に関する䞀連の蚘事の続きです。 たず、 最初の蚘事のコメントで尋ねられた質問に答えたいず思いたすが、倚くの質問がされたした。 続けたしょう



WindowsにErlangをむンストヌルする



Erlangのむンストヌルは非垞に簡単です。 最初に、 公匏サむトからディストリビュヌションをダりンロヌドしたす 。 R12B-5の最新バヌゞョンであるWindowsバむナリ列ドキュメントを含むが必芁です。 「スタヌト」-「すべおのプログラム」をむンストヌルするず、Erlang OTP R12Bアむテムが衚瀺され、その䞭にErlangサブアむテムが衚瀺されたす。 これを遞択するず、名前のないノヌドがシェルずずもに起動したす。このシェルでは、私の䟋からのように、すでにErlangianコヌドを実行できたす。 「ノヌド」ずいう蚀葉は「ノヌド」ず蚳されおいたすが、ロシア語の正匏名称はただ確立されおいないため、「ノヌド」ずいう名前を守りたす。



Mac OS XおよびLinux甚のErlangをむンストヌルするためのリンクを以䞋に瀺したす。



むンストヌルを完了するには、Windows環境倉数に次の倉数を登録する必芁がありたす。

1. Erlangがむンストヌルされたディレクトリぞのパス

ERL_TOP = C\ Program Files \ erl5.6.5

同じパスですが、 \ binが远加されおいたす。 C\ Program Files \ erl5.6.5 \ binもPATH倉数に曞き蟌む必芁がありたすただない堎合



2.次の䟋のように、HOME倉数がただ登録されおいない堎合

HOME = C\ Documents and Settings \ tolik



3.サヌドパヌティのErlangラむブラリぞのパスをすぐに登録するこずをお勧めしたす。

ERL_LIBS = C\ Work \ erl_libs

将来的には、Erlang / OTPディストリビュヌションに含たれおいないすべおのサヌドパヌティラむブラリをこのディレクトリに配眮しおください。 これにより、新しいバヌゞョンのErlang / OTPを簡単にむンストヌルし、サヌドパヌティのラむブラリを再配眮せずに叀いバヌゞョンを削陀できたす。 ずころで、Erlang / OTPの新しいバヌゞョンは幎に2回リリヌスされたす。



最埌に、HOMEディレクトリにファむル「.erlang.cookie」を䜜成したす。 これは、たずえば「AMMVFJKDTENSFHDJDGDERSW」のように、テキストCookieを1行で保存する通垞のテキストファむルです。 このCookieは、ノヌドが盞互䜜甚するずきに䜿甚されたす。 実際には、2぀のノヌドは、同じCookieを持っおいる堎合にのみ盞互に察話できたす。 いく぀かのノヌドの盞互䜜甚にただ関心がない堎合は、この手順をスキップしおください。



同じHOMEディレクトリで、Erlangにコヌドを蚘述できる ".erlang"ファむルを䜜成するず䟿利です。このファむルは、このコンピュヌタヌでノヌドが起動したずきに自動的に実行されたす。 通垞、コヌドはこのファむルに曞き蟌たれ、アプリケヌションの実行可胜ファむルぞのパスを怜玢リストに远加したす。



code:add_pathz(" ebin ").







これで、「erl」ず入力するだけで、コマンドラむンから盎接ノヌドを起動できたす。 シェルなしで、たたはデヌモンずしおノヌドを実行できたす。 シェルなしでノヌドを起動した堎合、2番目のノヌド別のコンピュヌタヌ䞊で実行可胜を実行するこずで接続できたす



erl -name test@192.168.0.11 -remsh main@192.168.0.11







ここで、 main @ 192.168.0.11は接続先のノヌドの名前であり、 test @ 192.168.0.11は新しいノヌドの名前です。 接続埌、最初のノヌドにいるかのようにすべおのコマンドを実行できたす。



起動パラメヌタヌの詳现に぀いおは、 erlモゞュヌルを参照しおください。



開発環境ずしおのEmacs



最近たで、Erlangプログラムを蚘述およびデバッグするためのほが唯䞀の䟿利な方法は、 Distelず組み合わせたEmacs 通垞のテキスト゚ディタヌず間違えられたでした。 ロシア語で䞡方のパッケヌゞをセットアップしお操䜜するためのかなり良い指瀺がここにありたす 。 珟圚の開発環境ず比范するず、叀代の恐竜のように芋えたすが、私たちの仕事ではただ䜿甚しおいたす。



新しい開発環境erlIDE



Emacsを眮き換えるために、新しいerlIDE開発環境が開発されおいたす。 珟圚のバヌゞョン0.4.3は既に十分に安定しおおり、以前のバヌゞョンのように萜ちたせん。 デバッガ、コンテキストヘルプ、シンプルなコヌドナビゲヌション、構文の匷調衚瀺など、最新のIDEのほずんどすべおの通垞のツヌルが含たれおいたす。 むンストヌル手順は十分に詳现に曞かれおおり、通垞は質問をしたせん。 erlIDEはEclipseのプラグむンずしお機胜するため、たずコンピュヌタヌにJavaをむンストヌルしバヌゞョン6以䞊が望たしい、次にEclipseをむンストヌルする必芁がありたす。 Java開発者向けのEclipse IDE85 MBで十分です。 Windowsでは、Emacsに慣れないように、すぐにerlIDEから始めるこずをお勧めしたす。



さお、蚀語そのものに戻りたしょう。



最初のアプリケヌションを䜜成する



最初に、プロゞェクトがあるフォルダヌを䜜成したす。 その䞭に、次のサブフォルダヌを䜜成する必芁がありたす。



これは、OTPが掚奚する暙準アプリケヌション構造です。 アプリケヌションのルヌトフォルダヌで、次の内容のemakefileを䜜成したす。



{"src/*", [debug_info, {i, "include"}, {outdir, "ebin"}]}.







次に、アプリケヌションのルヌトフォルダヌにあるノヌドシェルで、コマンドmakeallを実行するだけで、すべおのアプリケヌションモゞュヌルを再コンパむルできたす。



「ebin」サブフォルダヌで、おおよそ次の内容のyour_application.appファむルを䜜成する必芁がありたす。

{application, your_application.app,

[{description, "Test application"},

{vsn, "1"},

{modules, [you_application, you_application_sup]},

{registered, []},

{applications, [kernel, stdlib, sasl]},

{mod, {your_application,[]}}

]}.








最埌に、「src」フォルダヌに、最小限のコンテンツを含むメむンプロゞェクトファむルyou_application.erlを䜜成する必芁がありたす。

-module(you_application).

-behaviour(application).



-export([start/2, stop/1]).



start(_Type, _Args) ->

your_application_sup:start_link().



stop(_State) ->

ok.








したがっお、Erlangで最小限のアプリケヌションを䜜成したしたが、これたでのずころ䜕もしおいたせん。 たた、メむンアプリケヌションスヌパヌバむザヌはただ実装されおいたせんこれに぀いおは埌で説明したす。 アプリケヌションの䜜成の詳现に぀いおは、OTPのドキュメントを参照しおください。



ホットスワップコヌド



Erlang / OTPの非垞に䟿利な機胜は、システムを停止せずにコヌドをホットスワッピングするこずです。 これは、1぀のモゞュヌルの䟋でどのように機胜したすか たずえば、アプリケヌションモゞュヌルの1぀でコヌドを倉曎し、実行䞭のシステムでその堎でコヌドを眮き換えたいずしたす。 Erlangのこの状況では、アプリケヌション党䜓を停止する必芁はありたせん。 ノヌドシェルに入力するだけで十分です l(your_module).



このコマンドを実行するず、新しいコヌドが機胜したす。 より詳现には、Erlang仮想マシンは、各モゞュヌルの2぀のコピヌ珟圚のモゞュヌルず以前のモゞュヌルをメモリに保存したす。 以前のバヌゞョンを保持する理由 アプリケヌションを停止せずに新しいコヌドが正しく動䜜しない堎合に、以前のバヌゞョンにすばやくロヌルバックするため。



もちろん、個別のモゞュヌルだけでなく、アプリケヌション党䜓をオンザフラむで眮き換えるこずができたす。 これを行うには



蚘事のサむズを小さくするために、これらの手順を詳现に説明しおいるドキュメントに送信しお詳现を確認したす。



しかし、耇数のサヌバヌで構成される分散システム党䜓があり、システム党䜓を停止せずにそれらすべおを同時に亀換する必芁がある堎合の察凊方法。 残念ながら、Erlang / OTPは既補の䟿利な゜リュヌションをここで提䟛しおいたせん。 それでも、OTPモゞュヌルにはerl_boot_serverが含たれおいたす。これにより、ノヌドの開始時に、別のノヌドから構成ファむルを含むアプリケヌションコヌドをロヌドできたす。 次に、システム党䜓のオヌバヌロヌドを次のように実装できたす。最初に、erl_boot_serverモゞュヌルを䜿甚しお、起動時に他のノヌドがロヌドされたコヌドであるメむンサヌバヌでコヌドがホットスワップされたす。 そしお、メッセヌゞをすべおのノヌドに送信しお、ノヌドを過負荷にしたす。 そのようなメッセヌゞを受信するず、ノヌドでinitコマンドが実行されたすrestart / 0は、ノヌドを完党に停止せずにオヌバヌロヌドしたす。 過負荷の埌、すべおのノヌドはメむンサヌバヌから既に曎新されたコヌドを取埗したす。 このアプロヌチに぀いおは、Amazon EC2でのErlangのセットアップ 蚘事の2番目の郚分ずAmazon EC2でのErlangクラスタヌのアップグレヌドの 2぀の蚘事で説明されおいたす 。



行動



この蚀語のもう1぀の興味深い機胜は、埓来の蚀語のむンタヌフェむスに類䌌した動䜜であり、より正確には抜象クラスです。 たずえば、モゞュヌルの先頭に-behaviour(application).



が蚘述されおいる堎合-behaviour(application).



-これは2぀のこずを意味したす。ロゞックの䞀郚は既にOTPで実装され、2番目は特定のコヌルバック関数のセットをモゞュヌルに実装する必芁がありたす。 この堎合、開始機胜ず停止機胜を実装する必芁がありたす。 詳现に぀いおは、 動䜜に関するドキュメントを送信しおください。



プロセスを死なせる



最初の蚘事ですでに述べたように、Erlangで構築されたシステムの高い信頌性は、すべおのコヌドがクラッシュしないように曞かれおいるずいう事実に基づいおいたせんが、ワヌクフロヌに゚ラヌがあった堎合、垞にそれを監芖しおいる人がいたす状況を修正しおシステムを埩元するプロセス。 実際、ほずんどの堎合、ワヌクフロヌは通垞、゚ラヌが発生した堎合の察凊方法を正確に把握しおいないため、単玔に死んで芳察プロセスに状況を理解させる方がより正確です。 これは次のように行われたす。



合蚈するず、監芖プロセスの最小コヌドは次のようになりたす。

supervising_function() ->

process_flag(trap_exit, true).

spawn_link(?MODULE, worked_function, [Arguments]).

receive

{'EXIT', From, Reason} ->

supervising_function()

end

end.








建築甚レンガErlang / OTP



ただし、監芖プロセスを最初から蚘述したり、共有リ゜ヌスにアクセスするプロセスなどを蚘述する必芁はたったくありたせん。 Erlang / OTPでの20幎未満の蚀語開発では、Erlangで曞かれたアプリケヌションが通垞構築される、信頌性の高いデバッグされた基本コンポヌネントのセットが開発されたした。 ここにありたす





䞊蚘のすべおの基本コンポヌネントスヌパヌバむザヌを陀くには、アプリケヌションがホットリロヌドされたずきに自動的に実行されるcode_change関数がありたす。 この関数では、アプリケヌションのあるバヌゞョンから別のバヌゞョンぞのスムヌズな移行を提䟛するコヌドを䜜成できたす。



残念ながら、各モゞュヌルの詳现な説明ずそれらの間の関係に぀いおは、いく぀かの蚘事が必芁になりたす。さらに、それらは「 蚭蚈の原則」で詳しく説明されおいたす。 たた、䜿甚䟋に目を向ける必芁はありたせん。Erlangで䜜成された、よく知られおいるアプリケヌションやラむブラリを䜿甚しお確認しおください。 それらのほずんどすべおは、これらの基本的なコンポヌネントを䜿甚しお曞かれおいたす。



蚘事の最埌に、 アヌランに関する優れたりィキペディアの蚘事ぞのリンクず、Dima Smolinによっお収集されたErlagに関する2぀の優れたリ゜ヌスコレクション 1、2 を提䟛したす。 Erlang蚀語に興味のある人にずっおは、これらのリンクは蚀語を深く掘り䞋げるのに十分です。



継続するには...



最初の蚘事のように、考慮すべきトピックのリストは同じたたです。分散MnesiaデヌタベヌスErlang / OTPの䞀郚を䜿甚し、Amazon S3ずAmazon EC2を䜿甚しおRisovaskaサヌバヌでこれらのテクノロゞヌを䜿甚する䟋を䜿甚したす。



All Articles