[ruby-core:99501] [Ruby master Feature#17104] Do not freeze interpolated strings when using frozen-string-literal
From:
jean.boussier@...
Date:
2020-08-06 11:10:16 UTC
List:
ruby-core #99501
Issue #17104 has been updated by byroot (Jean Boussier).
> I'd argue "a#{2}c" is not a string literal ("a2c" is a string literal).
I understand your point of view. However in my view what defines a literal, is the use of a specific syntax, so `""` in this case.
Same for hashes or arrays, `[1 + 2]` is a literal (to me), it might not be a "static" literal, but it is a literal nonetheless.
----------------------------------------
Feature #17104: Do not freeze interpolated strings when using frozen-string-literal
https://bugs.ruby-lang.org/issues/17104#change-86958
* Author: bughit (bug hit)
* Status: Open
* Priority: Normal
----------------------------------------
```rb
#frozen_string_literal: true
def foo(str)
"#{str}"
end
fr1 = 'a'
fr2 = 'a'
fr1_1 = foo(fr1)
fr2_1 = foo(fr2)
puts fr1.__id__, fr2.__id__, fr1_1.__id__, fr2_1.__id__
puts fr1_1 << 'b'
```
Isn't the point of frozen literals to avoid needless allocations? But interpolated strings are allocated each time, so freezing appears pointless.
--
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>