osiire’s blog

ふしぎなそふとやさん

FRPの実装

前にも触れたけど、これ((http://conal.net/papers/simply-reactive/)を元にOCamlFRP(っぽいもの)が実現できる機能をconcurrent cellに追加した。ほぼできたと思う。あとはテスト(バグがないか、メモリリークはないか、速度はどうか)といったところ。もし興味がある強者がいらっしゃったら、
svn checkout svn://svn.forge.ocamlcore.org/svnroot/ccell
からチェックアウトして下さいまし。
とにかく、このFRPの実装は落とし穴が多かった。最初は簡単かもと思って始めたのに、まず論文に書いてあるHaskellの実装をOCamlに直すところで躓き(主に止まらない)、Futureの意味を理解するのに躓き、論文のままだとpull評価の値を評価しないと延々とメモリが食われる問題にどう対処するか悩み(しかもスレッドを生成せずに)、最後にはjoinの実装をハックで乗り越え、やっとできた。前のエントリが11月6日なので、ほぼ二ヶ月費やした。途中でもうjocaml使えばいいじゃん!と思って本気でconcurrent cellを捨てようとしたりもしたけど、rendezvous message passingも捨てがたいはずと思い直したりもした。いやー、色々あったけど結果オーライという事で。