Scala
JVM上で動く、オブジェクト指向と関数型を融合した言語。大規模なデータ処理基盤などで採用された。
時代背景
Scalaの設計者Martin Odersky本人がscala-lang.org公式サイトに執筆した『Scala's Prehistory』によれば、OderskyはETH Zürichで1986年から1989年まで、Modula-2やOberonの開発者Niklaus Wirthのもとで博士課程の研究をしていた。その後プログラミング言語の基礎理論と関数型プログラミングの研究に進み、1995年にはPhilip Wadlerと組んでJavaバイトコードにコンパイルする関数型言語『Pizza』を開発、この成果はやがて新しいjavacコンパイラとJavaジェネリクスにつながるGJへと発展した。1999年にEPFL(スイス連邦工科大学ローザンヌ校)に加わってから研究の方向性は少し変わり、目標は変わらず関数型とオブジェクト指向の融合だったが、Javaの制約に縛られない形を模索するようになったという。
種類・系譜
Odersky本人の記述によれば、EPFL移籍後の最初の成果は、join calculusのオブジェクト指向版である『functional nets』に基づく最小主義的な研究言語『Funnel』だった。Funnelは言語設計としては非常に純粋で、クラスやパターンマッチングを含むほとんどの機能がライブラリとエンコーディングで実現される、極めて少ないプリミティブ機能しか持たない言語だったが、実用面では快適さに欠けていた。ミニマリズムは言語設計者には魅力的でも、利用者には向かなかったとOdersky自身が振り返っている。この反省を踏まえた2番目の——そして現在に至る——一歩がScalaであり、Funnelのアイデアの一部を、標準プラットフォームとの相互運用性に重点を置いた、より実用的な言語に落とし込んだものだという。
仕組み
EPFL公式テクニカルレポート『An Overview of the Scala Programming Language』(Odersky他共著、2006年)によれば、Scalaはコンポーネントソフトウェアのためのより良い言語サポートを開発する研究の一環として2001年からEPFLのプログラミング手法研究室で開発された。Scalaという設計思想の核には2つの仮説があるという。第一に、コンポーネント向けの言語は『スケーラブル(scalable)』である必要があり、同じ概念で小さな部分も大きな部分も記述できるべきだという考え方。第二に、静的型付き言語においてオブジェクト指向と関数型プログラミングを統一・一般化することで、コンポーネントへのスケーラブルな支援を提供できるという仮説である。当時の静的型付き言語ではこの2つのパラダイムは大きく分離されたままだった、とレポートは述べている。
現在
Odersky本人の記述によれば、Scalaの設計は2001年に始まった。最初の公開リリースの時期については、Odersky本人執筆の2008年『Prehistory』ページは『2003年』、2006年のEPFL公式テクニカルレポートは『2004年1月にJVM版、同年6月に.NET版』としており、細部の記述にわずかな差がある。2006年には再設計を経た第2版がScala v2.0としてリリースされたという点は両資料とも一致している。EPFL公式レポートによれば、ScalaはJavaの拡張ではないが完全にJavaと相互運用可能であり、Javaバイトコードにトランスレートされ、コンパイル後のプログラムの効率はJavaとほぼ同等になるよう設計されている。
関連項目
- Javaサン・マイクロシステムズが開発した、「一度書けばどこでも動く」を掲げた言語。仮想マシン上で動く仕組みで環境差を吸収し、企業システムやAndroidアプリの基盤として広く普及した。