BT

Ready for InfoQ 3.0? Try the new design and let us know what you think!

10歳になったScala

| 作者: Alex Blewitt フォローする 4 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2014年2月9日. 推定読書時間: 3 分 |

原文(投稿日:2014/01/20)へのリンク

10年前の今日(1/20),Michel Schinz氏はプログラム言語Scalaの最初の実装を発表した。発表時のScalaは,"オブジェクト指向と関数プログラミングをスムーズに統合した言語"であり,"一般的なプログラムパターンを簡潔かつエレガントに,タイプセーフな方法で記述できるよう設計された" と説明されている。

オリジナルの発表内容を読むと,

私たちは,プログラム言語Scalaの最初の実装を公開します。Scalaは,オブジェクト指向と関数プログラミングをスムーズに統合した言語で,一般的なプログラムパターンを簡潔かつエレガントに,タイプセーフな方法で記述できるよう設計されています。Scalaには,革新的な言語構造がいくつか採用されています。例えば,

  • 抽象型とミックスイン合成が,オブジェクトシステムとモジュールシステムのアイデアを統一します。
  • クラス階層上のパターンマッチングが,関数型およびオブジェクト指向型のデータアクセスを統一し,XMLツリー処理を大幅に簡略化します。
  • 柔軟な構文と型システムにより,高度なライブラリや新たなドメイン固有言語の構築を可能にします。

 

同時にScalaは,Javaと互換性があります。橋渡しコードや追加的な宣言の必要なく,Javaライブラリやフレームワークを利用可能です。

Scalaの現在の実装はJava VM上で動作します。JDK 1.4が必要で,WindowsやMac OS, Linux. Solaris,その他のほとんどのオペレーティングシステム上で実行することができます。.net版のScalaは現在開発中です。

.netバージョンは,現在ではメンテナンスされていない。もともとは両方のVMで動作して,オペレーティングシステム間の移植が可能な共通言語を提供する目的だったが,JVMのJiTが進歩し,Javaバイトコードへの依存性が拡大した結果,Scala 2.10がリリースされた時点で中止されることになった。

ScalaはJVM言語のメインストリームに関数プログラミングをもたらした。Java 8で導入されるラムダ(誤ってクロージャと呼ばれることが少なくない)とインターフェースのデフォルトメソッドは,Scalaに直接的な影響を受けている。いずれもScalaでは,関数やトレイトを通じて初期の頃から実現されていたものだ。これらが受け入れられたことが,より簡潔でテスト性の高い新たなプログラミングスタイルを生み出すことになった。

Scalaの成功は言語を複雑化するとともに,機能が可読性の向上と低下の両面を持ち得るようになった。メソッド名や関数(シンボルを含む)の名称としてUnicode識別子を可能にするために,標準ライブラリに=:=:+:\といった顔文字関数が追加されている。つまり可読性(readability)に関する潜在的コストを承知の上で記述性(writeability)を改善する,というトレードオフを選択したのだ。

最後にScalaは,今なお研究言語をもって任じている。新たな機能の試行や古い関数の廃止 (オリジナルのActosパッケージなど。Goのcoroutineと同じように,Scalaを有名にしたものだ) は現在でも継続中だ。生成されるバイトコードがリリースによって違うため,現行リリースのScalaでコンパイルされたオープンソースプロジェクトの数は限られている。2.10がリリースされて1年以上経過しているが,メジャーリリース間の移行には多くの労力が必要な場合も少なくない。

今年リリースされるJava 8に伴って,Scalaの機能のサブセットがJVMに導入されることになる。次のScalaに何が追加されるのか興味深い。言語としての安定化にはバイナリ互換性が必要だ。この10年間の内容を見ると,まだまだ先のようにも思われるが,いずれは分かることだ。

読者はScalaが次の10年間で,どのようになると思うだろうか?

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション
BT