Scalaの拡張性(1)

 "Scala"という名前は"a scalable language"に由来しています。"scalable"は「拡張性のある、拡張可能な」という意味で、"a scalable language"とは「拡張性のある言語」ということです。つまり、ユーザが必要としたことを拡張によって可能にできて、プログラマと言語がともに成長していける言語とういうことですね。

 完成された言語というものは、分厚い鉄筋コンクリートの壁でできた建物のようなものです。理系大学の名門・東京工業大学の本館は一度地震で崩れたことがあり、当時の教授たちが躍起になって絶対に壊れない建物を作ったそうです。それが、丈夫過ぎて破壊するのが難しく、改装計画がご破算になったことがあるそうです。†1 このように、強固な建物は一度作ると、不便が生じたときに対応できない問題があります。その点、Scalaでは拡張性によって、問題を解決することができるのです。

 Scalaの拡張性には以下のものがあります。

1.型を作れる
2.制御構造を作れる

 1.については、JAVAなどのオブジェクト指向の言語でもクラスを作ることによってある程度、実現可能なのですが、その記述方法はint型float型といった基本型のような簡単な記述ではなく、煩雑になって読みにくくなってしまう現象が起きます。一方、Scalaでは、新しい型を実装してしまえば、本来Scalaの持っている型のような扱いができます。

 2.では、CPUが"Core 2 Duo"(Intel)や"Athlon II"(AMD)のようなマルチコア†2になるにつれて、複数の計算を同時にできるようになりました。従来の言語では、並列実行される処理が分散されるようにソースコードの一部を改変しなければならない場合も多かったそうで、デッドロック†3が起こったりすることがあったようです。Scalaでは、もともとアクターというものがメッセージを互いにやり取りすることで、マルチスレッドを実現しているので、デッドロックのようなことが起こることはありません。

 Scalaでは以上のような方法で、型や制御構造を作ることができます。型や制御構造を作ることは面倒なように感じますが、作ってしまえば、Scalaに元から実装されている機能のように扱うことができるので便利になるようです。





<脚注>
†1 ソースは東工大に通う友人なので、事実という確証はありません。
†2 複数の処理を同時に行えるように大きいプロセッサの中に小さいプロセッサが複数入っているようなプロセッサ
†3 複数のコアプロセッサが互いの処理を待って、先に進まなくなる状態。