ScalaとErlangとPHPと私

November 23, 2010 - PHP, Scala

PHPよりScalaが簡単である、という議論に対するふたつのポストがあったので、自分向けにまとめました。

概要

ざっとこんな感じにまとめてしまいました。

  • 議論の中心はWebページ生成言語としての言語の比較ではない
  • ふたりともWebページ生成ならPHPが優れているという立場にかわりはない
  • 議論の中心は主にスケーラビリティの確保とプロセス間通信
  • 元記事のWade ArnoldさんはScala推進派
  • 返信者のvidelalvaroさんはErlang推進派
  • スケーラビリティ確保のためには関数型言語という結論
  • ScalaかErlangどちらが簡単か、という議論はない

ScalaがPHPより簡単な理由

Wade Arnoldさんが元記事「Scala is easier than PHP」において、マルチコア時代にはScalaが必要だ、みたいなことを書きました。彼はPHP3のころからPHPの開発に関わっていて、最近はZendFrameworkのコミッタをやっていたそうです。
PHPはいまだに最高の言語であると最初に断っておきつつ、Scalaの技術的な点を整理しておこう、という内容。

スケーラビリティの確保のためには、PHPのようにたくさんのツールを必要とせずとも、言語仕様的に多くをサポートするScalaが簡単な理由である、と。Scalaへの移行は時間を必要とするが、スケーラビリティには必要な選択であるといっています。

No need for amqp with actors, no beanstalkd with mutable queues, and it’s fast as hell!

ActorによってAMQPはいらなくなる。ミュータブルなキューもbeanstalkdなしに。そしてそれはものすごく速い。

PHPの代わりにErlangを使う理由

それに対してvidelalvaroさんが「Reply to "Scala is easier than PHP"」でコメントをしています。
おおむねWadeさんの意見に同意で、彼はScalaではなくErlangを推しているようです。

意見としてはこんな感じでしょうか。

  • サーバーのような長時間実行するプログラムにはErlangつかうといい
  • スレッド間通信にはErlangをつかうといい
  • Webページを生成するだけならPHPをつかうといい
  • CPUの全コアを利用したいだけならPHP-FPMをつかうといい

スケーラビリティ確保のために必要なもの

元記事ではPHPのスケーラビリティ確保のために必要なものをあげ、これらを使うのは大変骨が折れると言っています。

  • Fantastic at PHP internals
  • Amazing at Apache HTTPD and compiling appropriate PHP extensions.
  • Nginx
  • BigIP ? More than round robin load balancing
  • Intimately know how sessions work and probably write your own handlers
  • Memcached
  • APC
  • AMQP
  • BeanStalkd
  • Code based sharding or at least master/slave logic
  • C/C++
  • Lots of security! It’s a problem with all dynamic languages.
  • Zend Framework.

それに対してScalaはたった5つ。

ツールに頼らずとも言語が機能を備えているから気にすべきところが非常にシンプルになるようです。

個人的感想

PHPをWebページ生成以外で対決させるのはどうなんだろうと思いつつも、Scalaをどのような場面で使っていけばよいか考える良い機会になりました。
個人的な話をすると、Scalaは言語仕様を学ぶばかりで実際のプログラムを書くまでには至っていませんし、性能評価もまだやってないので「PHPからScalaに移行すべきだ」、と言い切るには至っていないのが現状です。
が、Wadeさんは後ほどもっと突っ込んだ記事を書くと冒頭に言っていますし、videlalvaroさんも最後に

if we want to sell functional languages like Erlang or Scala to the PHP programmer then we have to look for more compelling features that may attract them to look into these languages. What I think are those features ?I guess?, should be part of another blog post.

と、ScalaやErlangをPHPerに売り込むための魅力的な点をPOSTしてくれるかも。
それも楽しみにしておこうと思います。

余談

最近思うのが、Scalaって言語仕様があまりに多くて、それを学ぶことが楽しいです。
が、学ぶべき仕様がどこまでなのか見えてこず、さらに、仕様を学ぶこと自体が目的になってきているような気がします。
ということで(?)そろそろ、実際につくりたいプログラムを書きながら仕様を学ぶ方向にシフトしようと思います。

※あとPHP-FPMもちゃんと調査・検証したいし、Kestrelのソースも読みたい。