Java Fork/Join Framework, PLINQ, TPL


http://javac.info/というサイトがあるのですが、JDK7から実装される予定のクロージャの仕様検討を行っているサイトです。

JDK7からのクロージャについてはEBNFレベルではよく見ていたのですが、その構文を使った実装コードも出てきたようです。

http://javac.info/jsr166z.ztar

これは、JDK7から追加されるFork-Joinフレームワークにクロージャを取り入れた実装です。

へー,Fork-Joinフレームワークなんてのがあるのか,とちょっと調べてみました.一瞬 LINQ っぽい関数型言語風ライブラリ集かなとも思いましたが,調べてみると java.util.concurrent の直系っぽいですな.あくまで主目的は並列計算と.

シンタックスとセマンティクスが tick-tack と交互に影響を与えると考えれば,先に java.util.concurrent というセマンティクスがあって,その延長線上に Fork-Joinフレームワークを持って来つつ,(JDK7 の) クロージャ/ラムダというシンタックスを放り込んで昇華させる,という感じですかね.この辺は今の .NET と逆で面白いかも.



んで,.NET サイドの話.
この前の XNA 勉強会でもちょこっと触れましたが,PLINQ/TPL は OS (層) のスレッドプールに依存しすぎで,XNA/Xbox 360 みたいな環境とは相性あんまりよくなかったりします.より根本的には,タスクの Executor をライブラリが完全に隠してしまっているのがちと嫌なところですかね.今のところスレッドプールがしょぼいプラットフォームには持って行きづらいのが PLINQ/TPL.F# の async も同系統と.
java.util.concurrent であれば自分で Executor を作れそうなので,まさに Xbox 360 向きっぽいのですが (あんまり詳しく見てませんけど).言語依存部分を除いた,単純なライブラリ設計としては,java.util.concurrent の方が枯れている感じがしますな.
とはいえ XNA/Xbox 360 の場合,並列化を頑張っても高々 4 倍なので,次世代機でそこそこに動くスレッドプールと PLINQ/TPL が出逢えばいいやって話な気もします.