Project

General

Profile

Feature #8977

String#frozen that takes advantage of the deduping

Added by sam.saffron (Sam Saffron) about 7 years ago. Updated over 2 years ago.

Status:
Assigned
Priority:
Normal
Target version:
-
[ruby-core:57579]

Description

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 ?


Related issues

Related to Ruby master - Feature #8976: file-scope freeze_string directiveClosedmatz (Yukihiro Matsumoto)Actions
Has duplicate Ruby master - Bug #9229: [patch] expose rb_fstring() as String#dedupClosedmatz (Yukihiro Matsumoto)12/08/2013Actions

Also available in: Atom PDF