From: ko1@... Date: 2015-08-21T05:56:12+00:00 Subject: [ruby-core:70498] [Ruby trunk - Feature #8948] Frozen regex Issue #8948 has been updated by Koichi Sasada. A patch is small. ```diff Index: re.c =================================================================== --- re.c (revision 51650) +++ re.c (working copy) @@ -2548,6 +2548,8 @@ if (!re->ptr) return -1; RB_OBJ_WRITE(obj, &re->src, rb_fstring(rb_enc_str_new(s, len, enc))); RB_GC_GUARD(unescaped); + + rb_obj_freeze(obj); return 0; } ``` But I got many failures on rubyspec. https://gist.github.com/ko1/da52575de115c928ce4a ---------------------------------------- Feature #8948: Frozen regex https://bugs.ruby-lang.org/issues/8948#change-53898 * Author: Tsuyoshi Sawada * Status: Assigned * Priority: Normal * Assignee: Yukihiro Matsumoto ---------------------------------------- =begin I see that frozen string was accepted for Ruby 2.1, and frozen array and hash are proposed in https://bugs.ruby-lang.org/issues/8909. I feel there is even more use case for a frozen regex, i.e., a regex literal that generates a regex only once. It is frequent to have a regex within a frequently repeated portion of code, and generating the same regex each time is a waste of resource. At the moment, we can have a code like: class Foo RE1 = /pattern1/ RE2 = /pattern1/ RE3 = /pattern1/ def classify case self when RE1 then 1 when RE2 then 2 when RE3 then 3 else 4 end end end but suppose we have a frozen `Regexp` literal `//f`. Then we can write like: class Foo def classify case self when /pattern1/f then 1 when /pattern1/f then 2 when /pattern1/f then 3 else 4 end end end =end -- https://bugs.ruby-lang.org/