From: daniel@...42.com Date: 2020-10-21T02:57:27+00:00 Subject: [ruby-core:100462] [Ruby master Feature#17256] Freeze all Regexp objects Issue #17256 has been updated by Dan0042 (Daniel DeLorme). Given that string literals with interpolation were recently unfrozen, it would appear slightly inconsistent to freeze regexp literals with interpolation. `/#{str}/` is equivalent to `Regexp.new(str)` so I would find it a bit weird if they had a different behavior w/r freezing. It would make more sense to say that _all_ new regexps (including `Regexp.new` and `Regexp.compile`) are frozen. That way all constants such as `UNSAFE = Regexp.new("[^#{SAFE_STRING}]", false)` would be automatically ractor-safe. And if someone really needs to modify a regexp maybe they can use `dup`? `rx = Regexp.new(str).dup.extend(PrintWhenMatch)` ---------------------------------------- Feature #17256: Freeze all Regexp objects https://bugs.ruby-lang.org/issues/17256#change-88081 * Author: ko1 (Koichi Sasada) * Status: Open * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) ---------------------------------------- To be shared between ractors, Regexp objects should be frozen. Now, Matz has proposed to make all Regexp objects frozen. Ten months ago, there was a note https://bugs.ruby-lang.org/issues/16377#note-7 : > For the record: Regexp.new should continue to return unfrozen Regexp instance. So I'm not sure whether it is a good way or not. Could you give me your comment on it? If no comments are given, I'll try to freeze them before Ruby 3.0 preview 2. BTW, I believe `/#{expr}/o` should be frozen because this expression only returns one Regexp object. -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>