From: "tmm1 (Aman Gupta)" Date: 2013-12-09T07:08:18+09:00 Subject: [ruby-core:58977] [ruby-trunk - Feature #8977][Assigned] String#frozen that takes advantage of the deduping Issue #8977 has been updated by tmm1 (Aman Gupta). Status changed from Open to Assigned Assignee set to matz (Yukihiro Matsumoto) I just made some more arguments for this feature in #9229. The goal here is to provide runtime access to the frozen string literal table. This is not a new idea. For instance, see String.Intern in .NET: http://msdn.microsoft.com/en-us/library/system.string.intern(v=vs.110).aspx @samsaffron also made a good point above: older versions and other implementations of ruby can easily provide their own implementations of String#frozen: > It also could be implemented using weak refs in 2.0 and stubbed with a .dup.freeze in 1.9.3 . @ko1 also agrees with the feature above: > I can accept the way to get the string which we can get "foo"f dynamically. So the remaining question (as always) is a naming issue. I like String#frozen, but maybe there is some argument that it can be confused with #freeze. @matz Do you approve of String#frozen, or do you have some other preference? Other proposals are: String#dedup String#pooled String::frozen(str) ---------------------------------------- Feature #8977: String#frozen that takes advantage of the deduping https://bugs.ruby-lang.org/issues/8977#change-43529 Author: sam.saffron (Sam Saffron) Status: Assigned Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: Target version: current: 2.1.0 During memory profiling I noticed that a large amount of string duplication is generated from non pre-determined strings. Take this report for example https://gist.github.com/SamSaffron/6789005 (generated using the memory_profiler gem that works against head) ">=" x 4953 /Users/sam/.rbenv/versions/2.1.0-dev/lib/ruby/2.1.0/rubygems/requirement.rb:93 x 4535 This string is most likely extracted from a version. Or "/Users/sam/.rbenv/versions/2.1.0-dev/lib/ruby/gems" x 5808 /Users/sam/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/activesupport-3.2.12/lib/active_support/dependencies.rb:251 x 3894 A string that can not be pre-determined. ---- It would be nice to have "hello,world".split(",")[0].frozen.object_id == "hello"f.object_id Adding #frozen will give library builders a way of using the de-duping. It also could be implemented using weak refs in 2.0 and stubbed with a .dup.freeze in 1.9.3 . Thoughts ? -- http://bugs.ruby-lang.org/