「比較的最近まで、プログラミング言語は“命令型”か”関数型“のどちらかのカテゴリーにきちんとはまっていました。Scalaはこういった根拠のない制約を打ち破る新しいタイプの言語であることを示しています。」ScalaはまさしくJavaの次の次に来るものかもしれない、とDavid Rupp氏はブログに書いている。このようなコメントは読む価値がある。
Scalaにはオブジェクト指向性を示す主要な特徴がいくつかある。例えば、Scalaのすべての値はオブジェクトであり、関数ばかりでなく基本のデータ型(boolean型、数値型など)もオブジェクトである。また、クラスはサブクラス化することができ、mixin合成が提供されている。
「単一継承しかサポートしていない言語とは対照的に、Scalaはクラスの再利用に関してもっと一般的な概念を持っています。新しいクラスの定義において、Scalaは新しいメンバーの定義(言い換えれば、スーパークラスに関連付けられた差分)を再利用することができます。これは、mixinクラス合成として表されています。」Scalaが提供するいくつかの主要な関数の概念には、高階層関数、カリー化、ネスト関数、反復表記などがある。
Scalaは静的に型付けされているため、汎用クラス、内部クラス、そして多態方式も利用できる。他にもう一つ述べておくのに値するのは、ScalaはJavaおよび.NETと相互運用するように設計されているということである。Scalaの現バージョンは.NET上で動作しないのだが(前バージョンでは動作したが)、将来的には.NET上で動作させる計画がある。
ScalaはJavaの上でも動作する。コンパイラであるscalacを使用してソースファイルをJavaクラスファイル(例えば、JVM上で動作するバイトコード)に変換する。ScalaからすべてのJavaクラスにアクセスし、使用することができるし、JavaのアプリケーションからScalaのコードにアクセスすることもできる。Davit Rupp氏の言葉を引用すると、
「世の中にある、様々な、おびただしい数の既存のJavaライブラリも自由に使えることが、(潜在的に)マイグレーションパスをさらに簡単にするのに役立っています。」
これによってScalaはJavaライブラリの膨大なコレクションや、Java 1.4、5.0、また6.0用に作られた既存のフレームワークを利用できる。これらのフレームワーク上でScalaは定期的にテストされている。ScalaはJavaのさらに古いバージョンでも動作するかもしれないのだが、このようなバージョンにおいての公式なテストは行われていない。ScalaはBSDライセンスのもとで配布され、この数年間安定していると考えられている。
ここに、“なぜScalaを使うべきなのか?”という疑問が残る。Scala はある目的を念頭に入れて設計された。
「コンポーネントソフトウェアをより良くサポートする言語を作ること」(Scalaプログラミング言語、Donna Malayer氏)
その考え方は、ソフトウェアは再利用できる部品から構成できるように開発されるべきである、というものだ。Scalaの狙いは、オブジェクト指向と関数型の両方の面から、主要な概念を統一し一般化するプログラミング言語を提供することである。
Scalaが次のような卓越した機能を提供できるのは、このような目標を持って設計されてきたからなのだ。
- オブジェクト指向形式
- 関数形式
- 高水準並列処理モデル
「ScalaはErlang形式のアクターベースの並列処理をJVM上に取り入れています。開発者はScalaのアクターモデルを利用して、JVM上で拡張性のある並列処理アプリケーションを設計できます。Scalaのアクターモデルは、自動的にマルチコア・プロセッサをうまく利用するので、複雑なJavaのスレッドモデルのプログラミングをする必要はありません。」
- 関数のための軽量な構文
- XMLの統合
- ScalaプログラムでXMLディレクトリの記述が可能
- XMLからScalaクラスへ変換が可能
- Javaとのシームレスな相互運用
Scalaのスタイルと特徴によって、開発者の多くはScalaに関心を持ち続けている。その中の1人であるDebasish Ghosh氏はこう述べている。
「かなり長い間Scalaをいじくり回して、この言語の革新的なアイディアを十分に楽しみました。」
要約すると、ScalaはJVMで動作する、他に類を見ない、機能をシームレスに合わせ持つ関数型のオブジェクト指向言語である。開発者の興味が増し、サポートツールが増えるにつれて、Scalaは明らかにツールベルトに入れておくべき(手元に置いておくべき)言語になりつつある。