`sort` にジェネリックな比較関数を渡すと遅い
しかもメモリ割当が 2 倍に増える。
既知の問題である。名前解決がイテレーション毎に起こるから遅いらしい。メモリ使用量が 2 倍に増える理由について Karpinski は I'm not sure と応えており「えっ」となる。NumericExtensions.jl
が既にこの手の問題に対して 回避策 を講じているが、こんなところで Functor が登場しているのか。もっとも、Functor を渡してもインライン化が働くのは単純な関数の場合に限られるため、本当に最適化しようと思ったら @inbound
使って境界チェック切ろうということらしい。
長期的には、何も考えなくても効率的に実行されるようになるのが好ましいと Karpinski は述べている。
それにしても @elapsed
や @allocated
のようなマクロを挟むだけで実行速度やメモリ割当量を気軽に計測できるのは鬼のように便利だな…