2011年05月14日

なぜScalaなのですか

Odersky先生が書いた、Why Scala?という文章を読む。
http://blog.typesafe.com/why-scala

要訳するとこんな感じだろうか。ちと意訳し過ぎた感があるので注意。

尚、本文ではOdersky先生を甲とする。なんとなくそういう気分だったから。



Scalaの最大の目的は、開発者の生産性を高めること。

Scalaは、プログラマを目の前のロジックに集中させて、オブジェクト指向と関数型を合わせ持ってて、JVM上で動作してJavaとシームレスに連携する。

甲はアルファ版の頃(1995年)からJavaの開発に参加していて、エスプレッソコンパイラ(後のBorland JBuilderのコア部分)、Pizza Language(Java5のGenericsに関わるところ)、GJのコンパイラ(後のjavac)なんかを手がけてきた。

10年前(2000年頃?)、甲はソフトウェア開発の次の課題を研究し始めた。高度なドメインモデルとか、短期開発とか、最近では並列処理とか。

甲はそれらの課題が「オブジェクト指向+関数型」で解決できるんじゃないかと考えた。研究所でFunnelという実験的な言語を作ってみて、この考えが正しいと確信した。そこからより実践的な言語として開発されたのがScala(2003年)。

オブジェクト指向と関数型のコミュニティはよく対立してるけど、その2つは相性良く同居できるものだ。2つを組み合わせることは、高度なドメインモデルとかドメイン固有言語(DSL)などの新しい体験をもたらしてくれた。

ScalaベースのDSLは、NASAのログ解析や金融機関のリスク分析なんかで活躍してる。

Scalaはソフトウェ業界の次の課題である並列処理とか分散処理のためのいろんな機能を持ってる。parallel collectionとか、Actorとか。

Scalaの関数型の概念は並列処理において有利だ。mutableな状態を持つプログラムだと、何かとプログラマが責任を持って記述しないといけないから。

Scalaはトラディショナルな書き方を妨げるようなことはしないけど、スケーラブルな関数型の書き方を推奨してる。

Scalaはいろんなことに利用できる。ワンライナーとしても使えるし、大規模でクリティカルなシステムでも使える。

The GuardianのGraham Tackleyはこう言っていた。「Scalaは少ないコードで素早く開発できる。チームを活性化してくれる」