マニア向けお得情報

ベンチマーク測定をしているときに気付いたことを書く。
Ruby組込みのときには、通常のライブラリの場合に有効になっている機能の一部が無効にされた状態でコンパイルされる。これは、Rubyでは使用されることがない機能だからである。
具体的には、regint.hの中の、

  • USE_CAPTURE_HISTORY
  • USE_VARIABLE_META_CHARS
  • USE_WORD_BEGIN_END
  • USE_POSIX_REGION_OPTION

が、Ruby組込み状態では無効になっている。
鬼車4.1.0が予想以上に遅かったので色々試しているうちに、上記の中で、USE_CAPTURE_HISTORYとUSE_POSIX_REGION_OPTIONの二つを無効にしてライブラリを作成した場合、有効な場合に比べて一割弱速度が向上した。
実は、以前にベンチマーク結果として「鬼車4.1.0は、Ruby1.8 regexよりも1.35倍遅い。」と書いた結果は、この無効化を行った場合のものであって、デフォルトのままだと更に悪い結果になる。(その他の結果については、デフォルトのままで測定しているが) このことは、Ruby1.8 regexとの比較なので、Ruby組込みの状態に近づけた条件で測定しただけで、別に反則だとは思っていない。
若し上記二つの機能を使用しないのであれば、regint.hのUSE_CAPTURE_HISTORYとUSE_POSIX_REGION_OPTIONをコメントにすることで速度向上が実現できる。
USE_POSIX_REGION_OPTIONというのは、POSIX APIの型でキャプチャ結果を取得するためのオプションを利用するためのものであり、POSIX APIを使用しないのであれば、恐らく不要のものである。