Project

General

Profile

Bug #15960

rb_fstring should resize capacity [patch]

Added by jhawthorn (John Hawthorn) 21 days ago. Updated 20 days ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:93367]

Description

https://github.com/ruby/ruby/pull/2256

When a string is #frozen, it's capacity is resized to fit (if it is much larger), since we know it will no longer be mutated we'd like to save the space.

> puts ObjectSpace.dump(String.new("a"*30, capacity: 1000))
{"type":"STRING", "class":"0x7feaf00b7bf0", "bytesize":30, "capacity":1000, "value":"...
> puts ObjectSpace.dump(String.new("a"*30, capacity: 1000).freeze)
{"type":"STRING", "class":"0x7feaf00b7bf0", "frozen":true, "bytesize":30, "value":"...

(ObjectSpace.dump doesn't show capacity if capacity is equal to bytesize)

Previously, if we dedup into an fstring, using String#-@, capacity would not be reduced.

> puts ObjectSpace.dump(-String.new("a"*30, capacity: 1000))
{"type":"STRING", "class":"0x7feaf00b7bf0", "frozen":true, "fstring":true, "bytesize":30, "capacity":1000, "value":"...

I've attached a commit to make rb_fstring call rb_str_resize, the same as rb_str_freeze does.


Files

2256.patch (2.28 KB) 2256.patch jhawthorn (John Hawthorn), 06/26/2019 02:59 AM

History

#1

Updated by nobu (Nobuyoshi Nakada) 20 days ago

  • Status changed from Open to Closed

Also available in: Atom PDF