Issue #14475 has been updated by sam.saffron (Sam Saffron). sam.saffron (Sam Saffron) wrote: > "If the string is frozen, then return the string itself." > > Yeah I do not agree with this documentation, I think it should be changed. > > Trouble is that there is no simple way to de-duplicate unconditionally without inefficiency: > > Say `x` is an arbitrary string (either frozen or unfrozen) : > > ``` > x = -x # may return a non fstring > > x = -+x # will return fstring, but makes an unneeded copy > > x = -x.dup # fstring again, uneeded copy > > x = x.frozen? ? -+x : -x # too verbose > ``` > > Instead why not change it so `-` dedupes unconditionally? ---------------------------------------- Bug #14475: String de-duplication is broken in files with frozen_string_literal: true https://bugs.ruby-lang.org/issues/14475#change-70353 * Author: sam.saffron (Sam Saffron) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: 2.5.0, 2.6.0 * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- Create 2 files: test.rb ``` $LOAD_PATH.unshift(File.dirname(__FILE__)) require 'frozen' puts frozen.object_id puts frozen.object_id ``` frozen.rb ``` # frozen_string_literal: true A = "a" def frozen -"#{A}" end ``` Run `test.rb` ``` % ruby test.rb 70189973179400 70189973179260 ``` Change to `# frozen_string_literal: false` And you get ``` 70189973181360 70189973181360 ``` So something is over-optimising here, fix should be backported to 2.5.0 imo. -- 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>