【インタビュー】ティム・ブレイ氏

「Javaに並列処理と関数型言語の要素を」、ティム・ブレイ氏

2007/05/08

tim01.jpg サン・マイクロシステムズ Webテクノロジー ディレクターのティム・ブレイ(Tim Bray)氏

 これまでCPUはムーアの法則に従って高速化してきたが、今後、CPUは高速化よりも並列化が進む。「これまでは動作の遅いプログラムでも、来年には高速に動くというのが常識でした。しかし、これはもはや現在の状況には当てはまりません」。サン・マイクロシステムズでWebテクノロジー関連のディレクターを務めるティム・ブレイ(Tim Bray)氏は、近い将来にプログラマが直面する問題は、CPUのコア数が増えてハードウェアの並列化が進むのに対して、現在使われている言語の多くで並列プログラミングのサポートが十分でないことだという。

 「UltraSparc T1では8コア32スレッドの並列処理が可能です。IBMやAMD、インテルもCPUのコアの数を増やしつつあります。JavaEEを使えばスレッドサポートによる並列化の恩恵にあずかれますが、そうでない言語も多くあります」。

 ブレイ氏は、こうした問題に対して2つの方向性で解決を模索しているという。1つはグーグルが作った分散処理のフレームワークで「MapReduce」と呼ばれているもので、数万個のCPUで膨大なデータ処理をするといったときに有効だ。すでに、MapReduceをJavaで実装した「Hadoop」(ハドゥープ)というものがあるという。

 「Hadoopは外部ライブラリですが、Java言語自体で並列処理をサポートすることも必要」(ブレイ氏)といい、そのモデルとして2年ほど前から“Erlang”(アーラン)に注目しているという(参考記事:twitterブームの陰で注目を集める“Erlang”)。「Erlangはエリクソンが開発した古い言語ですが、とても興味深い特徴を持っています。きわめて効率的にプログラムの並列化ができ、ふつうのAMDやインテルのCPUを使って25万スレッドを動かすこともできます。ただErlangはオブジェクト指向言語ではなく、関数型言語です。つまり、一般的な言語になじんだ、ほとんどのプログラマには奇異に感じられるので、われわれとしてはErlangが持っているいいところを、もっと身近なRubyやJavaに入れていこうと考えています」。Java上で動くRubyの実装であるJRubyが、本家Rubyより先にこうした並列処理サポートを取り込む可能性もあるという。

 関数型言語は、一般的な言語とコードの書き方が大きく異なるものの、いずれJavaに関数型プログラミングの要素を入れていくことも必要だとブレイ氏は語る。「関数型プログラミングは、並列プログラミングに適しているばかりでなく、テストもやりやすいのです」。関数型プログラミングに対して感じる違和感について、「かつて、オブジェクト指向プログラミングは難しすぎて一般プログラマには習得できないといわれていましたが、今では当たり前のように使われていますよね。関数型プログラミングについても同様かもしれません」と楽観的な見方もあると指摘する。

 関数型プログラミングや並列プログラミングといった要素をJava言語自体に入れていくとなると、その変更は大きなもので、多くのプログラマが困惑しかねない。「段階的に言語に変更を加えていくのがいいでしょうね……、しかし、未来を予測するのは難しいものです。もしかしたら、一気に破壊的な変更を加えて、さっさと痛みを乗り越えるほうがいいのかもしれませんよね(笑) 」

関連リンク

(@IT 西村賢)

情報をお寄せください:



@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)