This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-07-23
Channels
- # admin-announcements (3)
- # beginners (35)
- # boot (87)
- # cider (84)
- # cljs-dev (6)
- # clojure (70)
- # clojure-austin (3)
- # clojure-italy (11)
- # clojure-japan (6)
- # clojure-korea (16)
- # clojure-russia (87)
- # clojurebridge (1)
- # clojurescript (122)
- # core-async (112)
- # cursive (2)
- # datomic (46)
- # editors (6)
- # jobs (2)
- # ldnclj (8)
- # re-frame (1)
- # reagent (1)
Monomorphic だったベクタのメソッドのインラインキャッシュがタプルのせいで megamorphic になってタプルが導入されるとベクタが遅くなる可能性がある。タプルが入ると call site が分割される(PersistentVector のメソッドが呼ばれる回数が減る)ので,ベクタのメソッドが JIT コンパイルされるタイミングが後ろになる。(Criterium で今まで実施されているような) マイクロベンチマークでは,これら現象をうまく測定できない。ということでしょうか。
PersistentVectorのメソッドの呼び出し回数が減るというよりは、megamorphic(1つのcall siteで複数クラスのメソッドが呼び出される)の状態になることで、メソッドのインライン化が効かなくなるとかそういうことだと思います。