JavaScript => Java => C => Ruby => Haskellと渡り歩いてきた(とはいえ、メインは常にJava)自分としては、かなり理想的な言語に見えるScala。
端的に言うと、「Javaを今風に変えてみました。ただしJVM上でJavaと同じように動きます。」って感じだろうか。今風の"風"は、Rubyテイスト+Haskellテイストというイメージ。C#3.0とも微妙にかぶるところがある。
全体的に自由度が増していて、マルチパラダイムデザインなんかで言うところの「共通性」「可変性」を扱うためのメカニズムが言語仕様レベルで豊富に導入されている雰囲気。
オブジェクト指向言語の側面では、Javaをより純粋なオブジェクト指向言語に近づけた上で、Rubyの柔軟性を足したような感じ。
HaskellからMonadをとっぱらったような感じ。参照透過性とかないけど、(Monadのようなものはあります。それに、参照透過性は言語レベルでは保証されないけど、参照透過性が保たれるように書くことはできます。もし知っている人がいれば、OCamlに近いといえばわかるのかもしれない。OCamlの文献をあわせて読むと参考になります。)JavaScriptよりは関数型の性格が強い。パターンマッチとか部分適用とかあるし。
というわけで、しばらくはScala公式サイトで配布している「ScalaByExample」をもとにScalaさわっていきます。ついでに最近ずっと話題だった、アクターモデルとやらを理解しておきたい。最終的にはScalaベースのWebアプリケーションフレームワーク、「Lift」でアプリ作ったり、Liftのソース読んだりしてみる予定。Rubyの大クラス主義やHaskellのMonadになじめなかった自分の安住の地になるといいなぁ…。
端的に言うと、「Javaを今風に変えてみました。ただしJVM上でJavaと同じように動きます。」って感じだろうか。今風の"風"は、Rubyテイスト+Haskellテイストというイメージ。C#3.0とも微妙にかぶるところがある。
全体的に自由度が増していて、マルチパラダイムデザインなんかで言うところの「共通性」「可変性」を扱うためのメカニズムが言語仕様レベルで豊富に導入されている雰囲気。
オブジェクト指向言語の側面では、Javaをより純粋なオブジェクト指向言語に近づけた上で、Rubyの柔軟性を足したような感じ。
- プリミティブを含め、すべてがオブジェクトに
- 演算子がメソッドに
- Singletonをデフォルトでサポート
- traitを使ってMixinが可能に(実装定義可能なインタフェースがある感じ)
- 特性(メソッド)と属性(フィールド)の区別がなくなった
- 既存クラスにメソッドを追加可能
- 型推論を導入
というわけで、しばらくはScala公式サイトで配布している「ScalaByExample」をもとにScalaさわっていきます。ついでに最近ずっと話題だった、アクターモデルとやらを理解しておきたい。最終的にはScalaベースのWebアプリケーションフレームワーク、「Lift」でアプリ作ったり、Liftのソース読んだりしてみる予定。Rubyの大クラス主義やHaskellのMonadになじめなかった自分の安住の地になるといいなぁ…。
関連エントリ
コメント