最近ちょっとScala度が上がっています。螺旋を表すScalaのロゴはDNAのらせん構造をも意味するわけです(超訳)
ここ数年はずっとPythonをメインに使っていて、大抵のことはサクサクかけて便利だし、コード読みやすいしFlaskは楽しいしと、特に不便を感じることはなく使っていたのだけど最近幾つかの要因が重なって心境の変化があった。
其の壱
devquizでPythonの高速化がめんどくさかった(というか出来なかった)こと。PyPyは手元のmacbookでは動かなかったので仕方ないとして、Cythonがクラスにしちゃうとよくわからんよねーと。だったら最初からC/C++で書けばいいんじゃないのかなぁと。
というわけで、Pythonの他に実行速度の速い言語も覚えておきたいなぁと思った(でも、LLっぽくお手軽に書きたいよね)。
其の貳
Haskellは面白いがなかなか身につかない。プログラミングHaskellからReal World Haskellを順調に読み終えて、じゃぁ実際に使うかと思っても、意外なとこで躓くことが多かった。あと、RWHの次に読む本がないというのも独学なヒトにはつらいとこでなかろうか。
もう一つは、仕事で使う用のライブラリとかバインディングが揃ってなくて、職場で使う機会があまりなかったっていうのも大きいかもしれない。
でも関数型プログラミングは楽しいので使いたい。
其ノ參
そろそろ、新しい言語を身につけたいよねーと。出来れば関数型で。
そしてScalaが気になりだした。
最初、Scalaを触ったときは、REPLの起動が遅いし型の定義とかめんどくさそうだし、javaはあまり好きじゃないし、自分は使わないわなぁと投げ出していたのだけど、RWH読み終えて型の素敵さに目覚めた上で再度Scalaを触ったらイイかもと思い始めた。javaのライブラリも使えるので仕事用のコードも書ける。
素数のリストだってHaskell風味に書けるし、Maybeに似た感じのOptionっていう型だったある。
def sieve(s: Stream[Int]): Stream[Int] = Stream.cons(s.head, sieve(s.tail filter (_ % s.head != 0))) val ps = sieve(Stream.from(2))
というわけで、ちょっとScalaで書こうかなと思っている。
書籍
プログラミングHaskellは名著。問題も含めて一度は読むべき
Real World Haskellは型の素晴らしさを学んだ。と共にHaskell難しいのうと感じた。そしてちょっと挫折した。
Scalaプログラミング入門は楽しい。でも色々端折ってて疑問点が出まくりなのでコップ本は必須かな。
バイブルになるか?
おまけ
ScalaってベターJavaなのかなぁ? Perl,Python,RubyとかのLLのヒトが関数型プログラミング+静的な型付けを求めて入るほうが自然な気がするんだけどなぁと、自分がそうなのでそう思うだけなのかなぁと。