1.5.9にcaseのジャンプテーブル最適化が入ったようなので早速どんなものか試してみたいと思います。News:1.5.9とりあえず若干わざとらしいものを試してみます。caseのキーに0から511までの数値をシャッフルしたものを指定して分岐し、さらに二段目のcaseで元に戻すのを5回繰り返すのを1000繰り返してみます。consedこの極端な例では35倍も速くなっています。CLでも同じ位のスピードが出るようです。mode発動ルールを探る上記の例では最適化が発動しましたが、caseのジャンプテーブル化ではそんなに大きなテーブルは作らないことがほとんどなので、SBCLではどういう縛りがあるか確認してみます。発動ルールは、src/compiler/ir2opt.lispのshould-use-jump-table-pの中に記述されているようで、キーの最大値から最小値を引いたもの+1がテーブルサイズテーブルサイズは分岐の数の二倍が上限のようです。chain)))))))上記ルールからすると、一つ置きで配置された整数のキーは最適化されますが、二つ置きだとルールから外れるので最適化されないことが分かります。一応試してみましょう。trapまとめSBCLのcaseのジャンプテーブル化は、キーをそこそこ密に配置する必要がある様子。CLと同じく、コンパイラが最適化で実施するので、Lispのレベルではifの組み合わせが最適化のルールに合致していれば発動します。SBCLには最近細かい最適化が入ってきていますが今後も地味に速くなって行きそうです。