パフォーマンスチューニング ガンガンいこうぜ

いくつかの改善して大きな改善が見られたのでメモ。次なる改善は 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++ で書き直した