読者です 読者をやめる 読者になる 読者になる

正規表現の遅延コンパイル

Ruby 1.9 だと irb の起動が速いとか、いやいや遅いよとかいう話の中で、正規表現コンパイルがそれなりの時間を食っているという指摘が。

それでは、実行時までコンパイルを遅延させればいいのでは?というのが以下のパッチ。もっとも、こうすると正規表現の文法エラーをパース時に取れなくなるのがネック。また、チェックだけすると総合的には処理が増えるのが切ない。

diff --git a/parse.y b/parse.y
old mode 100644
new mode 100755
index 78e66ee..2d83469
--- a/parse.y
+++ b/parse.y
@@ -3812,13 +3812,6 @@ regexp           : tREGEXP_BEG xstring_contents tREGEXP_END
                            node = NEW_LIT(reg_compile(STR_NEW0(), options));
                        }
                        else switch (nd_type(node)) {
-                         case NODE_STR:
-                           {
-                               VALUE src = node->nd_lit;
-                               nd_set_type(node, NODE_LIT);
-                               node->nd_lit = reg_compile(src, options);
-                           }
-                           break;
                          default:
                            node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
                          case NODE_DSTR: