Issue #8909 has been updated by enebo (Thomas Enebo).


Ok I have been talked out of the allowing changing contents of the literal.  Without guaranteeing the values never change then it is very limited in when you can do most of the "good" optimizations.  They can be done but generally only in the case where you are doing a pure-literal sort of code.  Once you assign the literal to a variable all bets are off (unless you can constant propagate it).  I rescind my idea :)

I need to think more about frozen literals and come back to this issue :(
----------------------------------------
Feature #8909: Expand "f" frozen suffix to literal arrays and hashes
https://bugs.ruby-lang.org/issues/8909#change-42235

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/