JavaScript を使って Actor 理論風の Future を作ってみました.Actor の生成は実装せずに関数で代用しています.実行時ライブラリに future と reply それぞれについて平均 0.5 秒の遅延を入れたので,ものすごく遅いです.以下の例の fact(4) の計算には約5秒がかかります.これは使用している future と reply の数が合計で約10個ということになります.fact(4) は再帰的に fact(3), fact(2), …, fact(0) を呼びますので,最初の fact(4) を future で呼び出すのも含めて5回の future が実行され,それぞれが一回ずつ reply するため合計で10回の通信が発生しますので,計算時間と一致します.
install('fact', function (n, reply) { if (n == 0) reply(1); else future('fact', n - 1, function (f) { future('multiply', n, f, reply); }); }); install('multiply', function (x, y, reply) { reply(x * y); }); future('fact', 4, alert);
実装に興味がある人はgithubを見て下さい.100行足らずの JavaScript のコード(messaging.js)です.
やたらに面倒なコードだと思われるかもしれませんが,Safari Extention のサンドボックス機構におけるメッセージングに応用しようとしています.Safari Extention API よりははるかに単純な機構になる予定です.乞うご期待.