2008-05-10 [長年日記]
λ. Scala勉強会@関東-1
水島さん企画のScala勉強会に参加。 企画の存在は覚えていたのだけど、参加表明が必要なことを見落としていることに前日気づく。結局、キャンセルがあったため参加することが出来た。
水島さんの発表「Scalaチュートリアル」が発表40分なのに、皆がツッコミを入れまくって2時間以上になっていてウケた。水島さん独演ショー。 水島さんの発表ではScalaがいかに節操のない言語*1かを理解することが出来、soutaroさんの発表では逆に型システムがきちんと考えられていることを窺うことが出来、興味深かった。 最近ちょっとJavaを使っていて、「これはダル過ぎる」と思っていたところなので、Scalaは使ってみたいなぁ。
帰りの電車で、宮本さんのA Scala Tutorial for Java programmers(和訳,PDF)を読んだ。
関連リンク
メモ
「/」が foldl とか、「これは酷い」と思ったw
「_+_」といった書き方はOBJ系の言語や、Agda2でも採用されている(Agda2 - ヒビルテ (2007-12-01))ので違和感なし。
……と思ったが、OBJ系言語やAgda2のやつが演算子を関数として扱うための記法なのに対して、Scalaのは任意の式に穴を空けられるのか。 そうすると、例えば _+_.toInt は ((x, y) => x+y).toInt ではなく (x, y) => x+y.toInt と解釈されるが、ラムダ式のボディになる範囲はどうやって決まるのだろうか? 「違和感なし」と書いたけど、前言撤回。やっぱり気持ち悪いかも。
「var z :Array[T] forSome { type T } = x」のとき、z(0) の型は T for Some { type T } ではなく、AnyRef になる。
水島さんのtwitterで取り上げられている implicit parameter の話は、Agda1だとimplicitな引数を明示的に与えるときには、通常の関数適用の f x とは別の f |x という記法を使うことで曖昧性を無くしていたので、Scalaだとどうしてるのかなと思って聞いてみたのでした。
- <URL:http://twitter.com/kmizu/statuses/808199043>
- <URL:http://twitter.com/kmizu/statuses/808199622>
- <URL:http://twitter.com/kmizu/statuses/808200187>
- <URL:http://twitter.com/kmizu/statuses/808200567>
implicit parameter を使った Poor Man's Type Classes 。 そういえば、Agda1での型クラスの実装も内部的にはimplicit parameterを使う形になっていた(“Overloading in Agda” by Catarina Coquand - ヒビルテ (2005-10-03))。
A Nominal Theory of Objects with Dependent Types
*1 ところで、この雰囲気はMerdを思い出すんだよなぁ。