というわけでこんなコードで速度を比較してみた。 github.com/halcat0x15a/ki… 手元のMacBook Proだと 0.46223246 2.68296919 って出力なんで5倍近く速い、はず。
2016-01-01 19:40:540.5083689 43.23210491 になった… Vectorのinstantiationが増えてStringからVectorのconcatenationに変わっただけなのだけどこんな違うのか。
2016-01-01 19:49:30まあトランスフォーマーによる積みあがったモナドスタック使うの、最適化積極的にされてる Haskell でも遅いし scala(z) なら遅くて当然みたいな感じだけど、freer すごいな。Kleisli とかを構造に埋め込んでフラットにするだけでここまで早くなるのか
2016-01-01 20:05:15Writerの実装がMonoidを使ってないのが不公平っぽいので直してWriter[String, ?]に関して測ったら 2.34981409 2.47337873 で差があまりない…
2016-01-01 20:07:16しかしWriter[Vector[String], ?]だと 0.5888474 59.75744597 だ。 よくわからなくなってきた。
2016-01-01 20:07:23@halcat0x15a java.lang.String に対する特別な JIT 最適化とかかかってるのかも。-XX 系のオプションで調べるといいです。
2016-01-01 20:11:06@halcat0x15a どのタイミングで何がコンパイルされてるか知りたいなら -XX:+PrintCompilation で調べるのがいいんじゃないかな。あとは XX じゃなくて X 系で JIT 切れたはずだから、切って JIT の影響どれだけあるか試すとか。
2016-01-01 20:17:13@halcat0x15a ごめん JIT コンパイル無効にするの X 系じゃなかった -Djava.compiler=none だ…
2016-01-01 20:20:32@halcat0x15a CompileThreshold の値ですか?freer が遅くなってるのは JIT コンパイルしすぎてそっちに時間かかってるのかな…warm up してから bench するといいかもですね。
2016-01-01 20:39:07Trampolineをかまして最終的にこうなった。 github.com/halcat0x15a/ki… 結果は 41.31428502 55.61239276 でまあこんなもんかなといった感じ。
2016-01-01 20:54:42RWSTも最後に加えた。 Eff: 40.48607411 MT: 55.95873723 RWST: 95.3433303 何でReaderT WriterTより遅いんだ…
2016-01-01 21:08:49@halcat0x15a @lyrical_logical まぁ(最近構造の変更あったので)遅いのありえなくもない(?)けど、さすがにあのコードじゃそもそも色々パフォーマンス計測方法に問題あると思うので、sbt-jmhとかでやってみます
2016-01-01 21:36:04@xuwei_k @halcat0x15a 確かにマイクロベンチ的には robust でないコードですが、いくらなんでも遅すぎでなんかおかしい感じはします…マジもんの performance bug じゃないといいんですが
2016-01-01 21:39:01