Ruby 2.3.0-preview1 Released

[source]

We are pleased to announce the release of Ruby 2.3.0-preview1.

Ruby 2.3.0-preview1 is the first preview of Ruby 2.3.0. Many new features and improvements are included.

Frozen String Literal Pragma is introduced. On Ruby 2.1, “str”.freeze is optimized to reduce object allocation. Ruby 2.3 introduces new magic comment and command line option to specify all the string literals in the source files. Additionally for debugging, you can get where the object is created on “can’t modify frozen String” error by –enable-frozen-string-literal-debug.

Safe navigation operator, which already exists in C#, Groovy, and Swift, is introduced to ease nil handling as obj&.foo. Array#dig and Hash#dig are also added.

did_you_mean.gem is bundled. did_you_mean.gem show the candidates on the NameError and NoMethodError to ease debbugging.

Try and enjoy programming with Ruby 2.3.0-preview1, and report us your knowledge!

3 Likes

I like the frozen string option but pity that it breaks the stdlib which ships with the same release :smiley:

~/D/o/tell_it ❯❯❯ RUBYOPT="--enable-frozen-string-literal" rails s                                                                                                                                                                          ⏎
/home/benny/.rubies/2.3.0/lib/ruby/2.3.0/uri/generic.rb:1344:in `to_s': can't modify frozen String (RuntimeError)
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source/rubygems.rb:257:in `normalize_uri'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source/rubygems.rb:198:in `add_remote'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source/rubygems.rb:25:in `block in initialize'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source/rubygems.rb:25:in `reverse_each'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source/rubygems.rb:25:in `initialize'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source_list.rb:98:in `new'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source_list.rb:98:in `combine_rubygems_sources'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source_list.rb:48:in `lock_sources'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source_list.rb:65:in `replace_sources!'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/definition.rb:502:in `converge_sources'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/definition.rb:97:in `initialize'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/dsl.rb:166:in `new'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/dsl.rb:166:in `to_definition'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/dsl.rb:11:in `evaluate'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/definition.rb:26:in `build'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler.rb:155:in `definition'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler.rb:123:in `setup'
        from /home/benny/Dev/onlim/tell_it/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/setup.rb:8:in `<top (required)>'
        from /home/benny/.rubies/2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:128:in `require'
        from /home/benny/.rubies/2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:128:in `rescue in require'
        from /home/benny/.rubies/2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:39:in `require'
        from /home/benny/Dev/onlim/tell_it/config/boot.rb:6:in `<top (required)>'
        from /home/benny/.rubies/2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /home/benny/.rubies/2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from script/rails:5:in `<main>' 

I thought it will break something but a stdlib thing :frowning:

2 Likes

Please report any issues on the Ruby issue tracker https://bugs.ruby-lang.org/issues :smiley:

1 Like

Safe navigation is awesome!
I need this functionality at my work quite often.
But we use Windows so I should wait not less than year-two to have it.

1 Like

I believe there’s no such thing as safe navigation in Windows ;-). Switch to Linux, or even open up a VirtualBox / Linux distro and use safe navigation today! :smile:

2 Likes