From: "headius (Charles Nutter)" Date: 2013-10-10T00:03:01+09:00 Subject: [ruby-core:57776] [ruby-trunk - Feature #8909] Expand "f" frozen suffix to literal arrays and hashes Issue #8909 has been updated by headius (Charles Nutter). =begin Note that if #8992 is accepted, the same optimization could apply to arrays and hashes. In other words: [].freeze {}.freeze [:foo, 1, true].freeze {:foo => 1}.freeze could all be optimized to return the same object everywhere, every time. For arrays and hashes with non-literal elements, they would not enforce elements being frozen...but neither does .freeze. ---------------------------------------- Feature #8909: Expand "f" frozen suffix to literal arrays and hashes https://bugs.ruby-lang.org/issues/8909#change-42378 Author: headius (Charles Nutter) Status: Feedback Priority: Normal Assignee: Category: Target version: next minor The "f" suffix to declare a frozen string was recently accepted into 2.1, and I think it's a spectacular addition. I would very much like to see it work for literal arrays and hashes too: [1, 2, 3, 4, 5]f {foo: 1, bar: 2, baz: 3}f There are many, many cases where this could reduce allocation (frozen array with literal elements would only need to be allocated once) and improve thread-safety (explicitly create frozen arrays and hashes when creating structures that might be used across threads). Is there any reason why we could not do this? I believe both of the above syntaxes would be invalid today, as was the case with the String "f" suffix, and hopefully that means the work to add this syntax would be similar. -- http://bugs.ruby-lang.org/