関数型言語と並列プログラミング

プログラミング言語がもっと強力に並列処理をサポートしなければならなくて、そうしたニーズがこれから急激に増えるだろうし、関数型言語がそうしたことを実現してくれるだろう、というようなことを学部生の頃よく妄想していて、3年生くらいの頃は並列・分散処理を強力にサポートした言語や処理系の研究をするんだろうと思っていましたが、結局紆余曲折を経てそうした話は「趣味」でやることにしてそれを「使う」側にまわろうと決断したのが例の願書締め切りの日でした。

それはさておき。最近 Erlang だとか MapReduce だとか JoCaml だとか、目的は違えどとにかくそうした並行・並列処理に関する話題が一部界隈で流行っているみたい。おかげで、上の記事を見つけたわけですが、まさに当時妄想していたような map と書くと自動で並列に処理されるといった仕組みが実現されている! 当時疑問にもっていた、どうやって平行性を記述させるかとか、どのくらいの粒度で並列化させて、どうやって粒度を判断するかとか、どうやって並列処理を実現させるかとか、とにかくそうした諸々の問題やアイデアが自分が考えるよりはるかに深いところまですでに考えられていて(そうなんだろうとは思っていたが)、そして実現されている様は感動的である。

結論は「データ並列化機能による自動並列化のほうが優れている」ということになると思います。たいていは,コントロール並列化機能を使ってむやみに手動で行うデータ並列化より,データ並列化機能による自動並列化のほうが賢いからです。

まさにそうなって欲しいし、そうなるべきだし、ならなくてはならない。こうしたエレガントな仕組みがもっと成熟して、日常的に使えることを切に願うのです。Haskell 始めようかなぁ・・・。