Scala勉強会第119回 in 本郷 2014年02月13日

rpscalaことScala勉強会第119回 in 本郷に参加してきました。

Scala勉強会第119回 in 本郷 - PARTAKE

この日はScalaの高速化の話が多かったですね。

Scalaの初心者向けのテキストを書くとしたらどのようなものが良いか

今回は初心者の方がいなかったので、上記のテーマでちょっと話をしました。

以上のような話がありました。僕もそろそろドキュメント書いていきたいですね…。

MD5のパスワードハッシュを総当たりで調べる | ぽんこつさん(ponkotuy)

少し前にJALの不正ログイン問題で数字6ケタのパスワードが話題になりましたが、そのパスワードのハッシュを総当たりで調べるというプログラムが流行っていたようです。

パスワード問合せシステムを作る (clojureのreducers) - Qiita

徳丸浩の雑記帳: 数字6桁パスワードのハッシュ値の総当たり、PHPなら約0.25秒で終わるよ

Java - String.formatが遅い理由 - Qiita

それに影響されてぽんこつさんがScala版を作り発表されました。

6桁数字をMD5で総当たりしてみた

なんかすっかりJavaみたいなコードになっていますが、1秒を切るスピードが出たようです。

noboxとIArrayというArrayライブラリについて | 吉田さん(xuwei_k)

吉田さんが最近作っているArrayのライブラリについて解説してもらいました。

自作のnoboxというライブラリの現状報告 - scalaとか・・・

noboxは、BoxingとUnboxingがパフォーマンスの問題になりやすいということで、プリミティブごとにコード生成するようにしたArrayのライブラリらしいです。

IArrayという名前で、またScalaのImmutableなArrayのライブラリを作った - scalaとか・・・

IArrayは、Scalaz用のArrayライブラリで、常にBoxingをすることでClassTagを使わないようにして、Functorなどの型クラスを作れるようにしたライブラリらしいです。

最近のScalaライブラリ&コンパイラの高速化とバグについて | 吉田さん(xuwei_k)

吉田さんから最近のScalaの細かい高速化と、バグについて紹介してもらいました。

たとえば Avoid generic collections operations hot paths by retronym · Pull Request #3444 · scala/scala ではListのnonEmptyメソッドを使うかわりにne Nilとするなど相当細かい高速化が行われているようです。これで 2% 高速化されるらしいです…。

それと、最近吉田さんがすごいバグを発見されて、

ScalaのHashSetのバグ見つけた - scalaとか・・・

2.11.0-M8で、

scala> Set(-2147483648, 1, -45023380, -1, 1971207058, -54312241, -234243394) - -1
res0: scala.collection.immutable.Set[Int] = Set(-2147483648, 1, -45023380, 1971207058, -54312241, -234243394)
scala> res0 == res0.toList.toSet
res1: Boolean = false

scala> res0.toList.toSet == res0
res2: Boolean = true

というふうに操作するとSetのEqualityが壊れるらしいです。 Hash値の関連のバグに見えますが、これはScalacheckじゃないと発見できなかったでしょうね。Scalacheck重要ですね。