正規表現の遅延コンパイル
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: