TinySegmenter.jlをGoと比較して負けたと思ったら若者が最適化してくれた
先日、TinySegmenter.jlの話を書いたら各方面から反響を頂きました。
repeatedly.github.iohttp://woxtu.tumblr.com/post/132337169740/rust-tinysegmenter
woxtu.tumblr.com qiita.comそんな中で、ikawahaさんがGoでも同様の最適化を実装していました。
ikawaha.hateblo.jpそれと比較するために、とりあえずJulia templateをPRして比較しました。
Ruby | Perl | Python | Node.js | C++ | Go | Julia | Julia (hash optimized) |
---|---|---|---|---|---|---|---|
132.98 | 134 | 111.85 | 105.31 | 48 | 10.50 | 11.70 | 10.35 |
実はTinySegmenterMakerのshogo82148さんが一部のhashのkeyをordしたIntで表現するというさらなる最適化を進めていたので、 ちょっと負けてしまったのですがJuliaのDictを生成するときのhash計算が遅いということをbicycle1885さんが特定してくれたので、Julia本体の最適化が進めば同じくらいにはなりそうだね、ということがわかりました(表のhash optimized)。
ちなみに、SGJ先生は「実は言語間の比較ではなくて最適化の比較になっていたんだけどね(てへぺろ)」みたいなことを告白しており、ikawahaさんの目の付け所は正しかったようです。
そういう意味では、Stringとしても処理できるし頑張れば最適化できるJuliaは楽しいですね、という気持ちになりました。今時のコンパイル型の言語だと突き詰めれば似たような性能になるんでしょうね。