> Note: we already have optimizations for immutable strings > starting with Ruby 2.1+ > > Ruby 2.1 - introduced opt_str_freeze > "literal string".freeze in source code dedupe, > fine-grained, conservative, but verbose and ugly > > Ruby 2.2 - introduced opt_aset_with/opt_aref_with > Hash#[] and Hash#[]= with literal string args have > implicit freeze applied to them. This only affects > base Hash objects and not subclasses; but is mostly > transparent. > > Ruby 2.3 - frozen_string_literal magic comment supported per-source > file. All literal strings in a source file with the magic > comment can behave like "literal string".freeze from 2.1+ > This needs to be carefully applied to existing source, > as it is easy to introduce incompatibilities. > > For Ruby 3, I do not support frozen_string_literal becoming the > default. I am 100% against breaking existing code. Too much > 1.8 code was broken when 1.9 came out and Ruby lost users as a > result. But it's not my decision... I thought it was already agreed that it would be the case. Are you saying Ruby 3 may not break backwards compatibility? > >> Performance wise will Immutable Strings be similar to Symbols? > > Maybe, I haven't checked in a while. Sometimes, things can be > faster since there's no intermediate (mutable) string object: > > `puts :foo` causes mutable "foo" to be created, but > `puts "foo".freeze` will not. > > I was going to say Strings have better known hashing algorithms > so you may get better hash distribution; but Symbols use > the hash value based on the underlying string nowadays (r51410) > >> If we put the hypothesis of removing Symbols from ruby would that have >> any negative impact on performance? > > Fundamentally they are different things, and I am not a > semantics person. Performance should not change much if at all. > The performance of most other languages is fine without symbols, > including Perl5 which I consider a close relative of Ruby. > >> What other side effects could we envision? > > But again, I don't support breaking production code. We may > need to support symbols in the language forever. Anyways, I > enjoy typing symbols since they take less keystrokes and require > less screen space, especially with 1.9+ JSON-like Hash syntax. Can you read my reply to Rodrigo? Does it make sense to you what I wrote there? Thanks. > However, symbols do take up more memory, since every symbol has > an immutable fstring is attached to them along with > symbol-specific data. Immutable strings only have extra > overhead from being in the fstring table. > > Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> > <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core> Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>