パフォーマンスチューニング ガンガンいこうぜ
いくつかの改善して大きな改善が見られたのでメモ。次なる改善は C++ の領域に入りそう。
改善が効いた点
すべてコンパイラのコードの改善。
- 数万回呼ばれるような手続内では fold/for-each/find など無名 closure を生成するものは使わない
- これらの手続きは汎用性を落としたグローバルな再帰手続きで書く
- これにより数万回 x 該当箇所分の closure 生成コストを稼げる
- 遅い append を特定し何とか回避
- (a b c ... 長いリスト) と (x y z) を append するのではなく ( (a b c ... 長いリスト) (x y z) ) のように先頭の参照を append することに
- このリストを lookup する手続きがこれに対応していれば良い
- (length 長いリスト) が発行される場合は富豪敵に複数回実行されない用に注意
- lookup 系の手続きを C++ で書き直した