methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

Erlangの強さ

Erlangで言うプロセスとは、実はfiber(aka. micro-thread, nano-thread, pico-thread)*1

で、fiberの実行コンテキストには、(たぶん)別スレッド、別プロセス、リモート(ネットワーク越し)、があるので、マルチコアCPUを使えば速くなるし、コンピュータを足せば速くなる。そして、どの実行コンテキストで動いているfiberも、Erlangの上からは透過的に操作できる。

Erlangつかったら1台のPC上でn万プロセス作れたよー」ってのは、効率的なfiberの実装が使える言語ならErlang以外でも可能。ただ、fiberを別スレッドで動かすスケジューラを作るのにはそれなりに手間がかかるし、リモートでってなったらもっと大変。

逆に言えば、その実装を使いやすいライブラリとして用意できれば、他の言語もErlangに対抗可能。で、ScalaErlangへの対抗馬と言われているのは、Scalaの標準ライブラリにそれが入ったから*2。ただし、効率性は判らない・・・ベンチどっかに落ちてないかな*3

Scalaの強みは、関数型言語の強さを持ちつつ、Javaの型システムと統合しているので、Javaのライブラリが使えること。Erlangが特殊用途向けに開発されたツールであるのに対して、Scalaは一般のプログラミング用に作られている。

*1:Actorモデルを実現するのに必要なプロセスには、プリエンプティブが不要

*2:http://www.scala-lang.org/docu/files/api/scala/actors$content.html

*3:ベンチくらい自分でやれよ>俺