[ruby-core:96211] [Ruby master Feature#16377] Regexp literals should be frozen

[email protected]
Newsgroups gmane.comp.lang.ruby.core
Message-ID <redmine.journal-83103.20191212100922.9bd7a10fbd172cf7@ruby-lang.org>
Issue #16377 has been updated by byroot (Jean Boussier).


>  just for the sake of Communicating the Holy Gospel of Immutability?

Please put ideological thoughts on me, that's not a good basis for debate.

> Regexp literals are not deduplicated in the same sense as frozen string literals; one /abc/ is independant from another /abc/

And if they were frozen, they could be.

> so we're not actually leaking "global" state

On a particular callsite it does.

> Or, more realistically, what about something like this?

```ruby
class Regexp
  @@analyses = {}.compare_by_identity

  def analyze
    @@analyses[self] ||= RegexpAnalyzer.analyze_performance_issues(self)
  end
end
```

----------------------------------------
Feature #16377: Regexp literals should be frozen
https://bugs.ruby-lang.org/issues/16377#change-83103

* Author: byroot (Jean Boussier)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
The following script:

```ruby
def mutate
  re = /foo/
  state = re.instance_variable_get(:@state)
  re.instance_variable_set(:@state, state.to_i + 1)
  state
end

3.times do
  p mutate
end
```

Output this:

```
nil
1
2
```

IMHO, you shouldn't be able to mutate an unduplicated literal.

GitHub pull request: https://github.com/ruby/ruby/pull/2705



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.