『クロージャによる超軽量並行プロセス』を JavaScript で

超軽量プロセスに興味を持ったのでここと、ここを参照してJavaScriptで実装してみた

とりあえず、JavaScriptは下のような感じ。
はい。すいません。じじぃさんの丸パクリです。


var Chan = function() {
this.state = "sender";
this.val = [];
};

var send = function(y, x) {
switch (y.state) {
case "sender":
y.val.push(x);
break;
case "receiver":
if (y.val.length == 0) {
y.state = "sender";
y.val = [x];
} else {
var f = y.val.shift();
f(x);
}
break;
default:
throw "error";
}
}

var recv = function(y, f) {
switch (y.state) {
case "receiver":
y.val.push(f);
break;
case "sender":
if (y.val.length == 0) {
y.state = "receiver";
y.val = [f];
} else {
var x = y.val.shift();
f(x);
}
break;
default:
throw "error";
}
}

とりあえず動くものはここに上げておきました