プロファイリング、最適化

最適化の楽しみについて。

使いやすいプロファイルを取るツールがあって、時間に余裕があるとき、最適化というのは実に楽しい。これは Common Lisp を使うようになるまで分からなかった感覚だ。

最適化しているときには(普通)仕様はかわらないので、純粋に技術として速度を求めればよく、ある意味パズルのようなものだ。少なくとも自分が取り組むレベルでは、パフォーマンスはそれほどクリティカルではないので、気楽、ということも大きいが。最適化の結果が数字で現れるのは癖になる。

  • format は遅い。無駄に使わないこと。
  • コンシングは、あからさまにリストを作らなくても標準の関数を使うことによっても生じる。文字列なら princ は不要。write-string が速い。というより、関数が何を行うか十分注意し、本当に必要な関数を使う。
  • とにかくプロファイル。
  • disassemble で変なことをやっていないか確認。
  • 無駄な評価をループ中でやっていないか?など当たり前のことをちゃんと確認。
  • 繰り返しは悪。最適化すべきポイントを見えにくくする、という意味でも。

Common Lisp が C なみに泥臭いこともできる、ということが何となく分かってきた。