Scalaの本を読んだ/Scalaインストール

話題になってるらしいが,何かにつけてキモい(気持ち悪い)言語だということがわかった.
構文のキモさが目立つけど,それより一つ一つの仕様がアドホックに見えて仕方がない.とても最近できた言語で最初から色々考えられて仕様が定められてるようには見えなくて,まるで古い言語に後から後から機能を足し込んだかのよう.

とりあえずインストールしてみたけど環境変数汚すのは一体何なんだろう.
http://cappuccino.jp/scala-ja/?Scala%BD%E8%CD%FD%B7%CF%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
あと本当に適当な場所に置いたけどどうするもんなんだろう.よくわからない.

解凍して.bashrcに

export SCALA_HOME=$HOME/source/scala-2.7.7.final
export PATH=$PATH:$SCALA_HOME/bin

だけ.

$ scala
Welcome to Scala version 2.7.7.final (Java HotSpot(TM) Client VM, Java 1.5.0_22).
Type in expressions to have them evaluated.
Type :help for more information.

scala> println("Hello, world!")
Hello, world!

これでめでたくScalaも3秒以上触った言語の仲間入り.


Scalaスケーラブルプログラミング.コップ本.
(三日で)450ページくらい読んだけど,最初の350ページくらいは面白くなかった.多分この本よくない.
キモいところは山ほどあるので挙げるときりがないけど,Clojureのときもいろいろ書いた気がするので少し書く.

  • 関数がファーストクラスだと謳っている割には普通の値として参照できない(val g = fができない.val g = f _val g = x => f(x)のような意味(引数の数はともかく).本当か?)
  • 大抵の場合に省略できるセミコロン
  • ()を{}で(一部)代用でき,括弧内の構文が変わる
  • 末尾最適化が単純な末尾再帰でしか行われなくて残念(JVMの命令セットによる制限らしい.JVM上で動くSchemeとかはどうなるんだろう.)
  • 型推論が弱い(オーバーロードや暗黙の型変換がある所為?)
  • 構文がとにかくキモい(S式ならよかったのに)

その他

  • 演算子の優先順位が先頭文字,結合の向きが末尾文字で決まる.新しいけど,:で終わってたら右結合とか適当に考えただろ…右結合で右のオペランドがレシーバになってconsできるのは面白いけど
  • 省略とシュンタックスシュガーがやたら多い気がするけど気のせいだろうか
  • 一般の識別子で表されるメソッドが演算子として使える(一般化するのはいいけど逆に読みにくくないか?)
  • 共変(covariant)とか.静的型付けの制限や限界が緩和されてるのはいいけど,結局のところ動的型付けだと普通にできることを一つ一つするためにどんどん型システムが複雑化してる気がする.あと静的型付けでも純粋関数型言語には(自動でしてくれるので)あまり関係のない話だった.
  • extractorを定義することで任意のオブジェクトをパターンマッチで分解できる
  • 型メンバ.牛に魚を食べさせることになってしまう(のをScalaでは型エラーとして検出できる)