Issue #14624 has been updated by phluid61 (Matthew Kerwin).


I'm confused; are you proposing that `nil.to_s` returns the same String object every time, or that string interpolation detects a `nil` object and optimises it?

A lot of times I rely on `"#{foo}"` returning a new String object that contains a copy of the #to_s of `foo`, so it seems to me like spec that `"#{nil}"` returns a new empty string every time.

----------------------------------------
Bug #14624: #{nil} allocates a fresh empty string each time
https://bugs.ruby-lang.org/issues/14624#change-71238

* Author: bumblingbear (Dillon Welch)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
This causes a bunch of unnecessary string allocations in the following scenario: "#{'rails' unless boolean_condition} is great". Each time this line is called when boolean_condition is true, it evaluates to nil and when nil is interpolated into a string it allocates an empty string. Ideally, the behavior of nil.to_s would reference a frozen empty string that wouldn't need to be reallocated each time.



-- 
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>