[Scala][Java][Lisp][Ruby]プログラミング言語Scala
Scalaというプログラミング言語を調べてみたので、レポート。
どんな言語か?
手続き型オブジェクト指向と関数型のハイブリッド言語。
静的型だが『型推論』をするため、面倒くさい変数の型宣言をある程度省略可能。
LispやRubyのようにifやfor、ブロック等も式として扱われる。
クロージャ完備。関数の部分適用(cut)や合成(compose)ができる。
パターンマッチ(destructureing-bindみたいなもの?)ができる。
http://www.scala-lang.org/
http://ja.wikipedia.org/wiki/Scala
JavaVM上で動くインタプリタと、Javaのバイトコードに変換するコンパイラの両方がある。
Javaライブラリとの親和性が高い。
性能
RubyやPython、(未チューニングの)Lispよりも格段に速い。Javaで書いたのとほぼ同じ性能が出る。
静的型言語なので、コンパイラの最適化が効きやすく、fib(40)は1秒程度。
RubyやPython、declareしていないCommon Lispなどの動的型言語だと、30秒〜1分以上かかる。
静的型が速い理由は、コンパイル時に型が決まるため。コンパイル時に型が決まっていれば、変数アクセス、関数呼び出し、算術演算などがほぼマシン語1命令に落とせる。動的型言語だと、(ほぼO(1)オーダだとしても)実行時に探索やディスパッチをする必要がある。
生産性
JavaVMを使っているので、メモリ管理はGC任せ。
クロージャがあるという点で、コードの重複除去はRubyと同じくらいできる。
マクロ相当の機能はないため、Common Lispと同じにはならない。
イメージ的には、Rubyに静的型の面倒臭さを付け加えた感じ。