【関数】Erlang【エリクソン】at TECH
【関数】Erlang【エリクソン】 - 暇つぶし2ch839:831
09/11/20 11:42:06
>>832,833
とりあえず>>830の用語に合わせて(>>831では)レスしていたが、
メッセージパッシング型が普通であるのなら、以下では、その用語で統一することにするよ。

>>834
まず、一般的なプログラミング言語と比較すると、Erlangのスレッドは粒度が非常に小さい、
言い換えると、スレッド生成やスレッド間通信のコストが極端に低いということを理解してくれ。
普通の言語が関数(あるいは手続きやメソッドと言い換えてもいい)を呼び出すのと同じ感覚で、
Erlangではスレッドが生成する。つまり、関数呼び出しとスレッド生成が(Erlang)では等価になる。

次に、質問にあったTreeやListといったデータ構造を、Erlangではどのように処理するのか?という点。
ちょうどWikipediaのErlangのページにListをQuickSortする処理が紹介されているから、それを嫁。
あるListを受け付けたErlangスレッドのQuickSort処理内容を、以下に解説する。

(1) そのListの先頭要素について、ある値(Pivot)より大きい部分Listと小さい部分Listに分割し、
(2) それらを処理する2個の子スレッドを生成して、それら部分リストを渡し、
(3) 子スレッドの処理結果(ソートされた2個の部分List)と値(Pivot)を結合して、それを処理結果として返す。

普通のプログラミングでは関数呼び出しの箇所が、Erlangではスレッド生成に置き換えられていることが
分かってくれるだろうか。Tree処理も同じだ。Treeの各ノードを辿りながら、そのノードに対応する
子スレッドを次々に生成し、それら子スレッドの「協調計算」の最終結果がTree全体の処理結果になる。

逐次言語に後付けでスレッド機構を組み込んだ、一般的なプログラミング言語に慣れた多くの人にとって、
このような協調計算型プログラミングモデルの認知には、発想の転換が求められるよ。
Erlangプログラマには、資源の排他制御などという原始的な仕掛けは見えないし、見る必要性が無い。
プログラマは本質の平行処理・分散処理(=協調型計算)のアルゴリズム設計に集中できる。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch