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>