Wednesday 8 July 2009

Scala

Java VM上の関数型言語という売りなんですが、少し流行っている(TwitterがScalaで実装されている!) とかなので、勉強中です。

最初、Eclipse で例題が動かなかったりしたので、かなり印象悪くって... あと、Scala Tutorial の書き方が「あんまり魅力的でない」。ってなわけで、少し時間がかかりました。

が、ようやっとわかりました。そう言えば、そういう話を聞いたのだが、これは、C. Hewitt の Actor の JVM 上の実装なんですね。

 val a = 1

みたいな形でオブジェクトそのものが状態を持たないようにして、オブジェクトのコピーと切替えで並列実行の記述を明確にするということなら、理解できます。 (その他の機能や構文の便利さ、型推論とかにはあまり感銘を受けませんでした)

  Scala の並行性を掘り下げる http://bit.ly/23migZ

でも、それだけに古臭い感じはあるよな。80年代後半に日本では、ちょっと並列オブジェクト指向言語が流行っていろいろ実装しました。僕も実装してみたし。

その時に出た問題はいろいろあるんだけど、

 並列実行とGCの相性の悪さ(結局止めてGCが良いらしい)
 メッセージの待ち合わせを入れるとDead lockしやすい
 待ち合わせの実装コストが高い (Queue がたくさん..)
 Actorの並列度をコンピュータの並列度にマップするのが難しい

とかかな。今実装しているCeriumだと、複数階層のパイプラインとかを使うんですが、Scala の古色蒼然たるActor でも結構面白い。

今だと、

 Java Concurrency
 Intel Thread Programming

あたりの本は必須なんだろうけど、また、Actor の本が出るんでしょうね。

Erlang と比較している人もいましたが、Erlang の(偽)Prolog構文よりは、とっつきやすい。

No comments: