Erlangのプロセス
の勉強。テキストのサンプルをちょっと修正して以下のように:
-module(counter). -export([start/0,loop/1]). start() -> spawn(counter, loop, [0]). loop(Val) -> receive increment -> loop(Val + 1); show -> io:format("value = ~w~n",[Val]), loop(Val) end.
counter.erlとしてセーブして、インタプリタから
1> c(counter). {ok,counter} 2> P = counter:start(). <0.38.0> 3> P ! show. value = 0 show 4> P ! increment. increment 5> P ! show. value = 1 show
こんな感じ。ってこれでいいんかいな?
再帰する関数であるloopをプロセスとしてspawnして、そこにインタプリタからincrementとかshowとかのメッセージを送っている。
KL1やFlengなら、オブジェクト指向風に書くスタイルを使うところ。明にメッセージやプロセスという概念を言語の中に入れる得失は何だろう?
分散処理系の実現は多分より楽になるとは思う。メッセージの内容以外に通信の必要が無いから(KL1/Flengでは、可能性としてはすべてのメモリ内容が通信の対象となりうる)。でもKL1/Flengなんかに慣れた身からすると、ちょっと変な感じも。