DBD::SQLiteのAggregatorに関するアイデアメモ

DBD::SQLiteのコールバックであるAggregatorがいかにも遅くて使う気があまり起きない。
ただでさえコールバックが遅い所に,step()毎にいちいちENTER/LEAVEしているので遅いのも当然である。

Perl VMのループを参考に,new()でENTER&SAVETMPSし,step()ではFREETMPS&LEAVE_SCOPEのみ実行,finalize()でFREETMPS&LEAVEすることにすればスコープ生成のオーバーヘッドは多少軽減できるだろうか。

MULTICALL化すれば一層速くなると思われるが,複数のstep()が並行して呼び出されるシチュエーションを考えるとこれはかなり難しそうだ。

ところでコールバックの呼び出しの最適化も重要だが,基本的な統計関数位はCで書いてビルトインにしてもいいのではないかとも思う。主な代表値・分散・標準偏差・共分散・相関係数くらいは組み込みでもいい。

あとはREGEXP()をCで実装したい。つまり,sub{ $_[0] =~ /$_[1]/ }は避けたい。pp_match()を呼び出すような構文木を作って…という考えただけで難しそうな仕事だが。