Stable Release in branch 2.5
2.5.9
Released 05 Apr 2021
(5 years ago)
SoftwareRuby
Version2.5
Status
End of life
Initial release2.5.0
25 Dec 2017
(8 years ago)
Latest release2.5.9
05 Apr 2021
(5 years ago)
End of bug fixes01 Apr 2020
(Ended 6 years ago)
End of life05 Apr 2021
(Ended 5 years ago)
Release notes https://ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/
Source codehttps://github.com/ruby/ruby/tree/v2_5_9
Documentationhttps://ruby-doc.org
Downloadhttps://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.9.tar.gz
Ruby 2.5 ReleasesView full list

What Is New in Ruby 2.5

Ruby 2.5 introduces a solid set of improvements focused on developer productivity and performance. This release brings refinements to core methods, new debugging capabilities, and significant performance gains for common operations.

Category Key Changes
New Features Top-level rescue, yield_self, Hash#slice, Hash#transform_keys
Performance Faster String#upcase/downcase, ERB generation, Mutexes
Debugging pp method in IRB, Binding#irb for any context
Standard Libraries ERB, BigDecimal, RubyGems, and RDoc updates
Miscellaneous New code coverage measurement modes, Socketry improvements

What are the new language features in Ruby 2.5?

Top-level rescue is now supported without needing an explicit begin block. This cleans up code by allowing rescue clauses to be used directly in method and class definitions.

The new yield_self method allows for elegant method chaining. It yields self to the block and returns the result, enabling a more functional programming style.

Hash Improvements

Hash#slice and Hash#transform_keys provide convenient ways to manipulate hashes. slice returns a new hash with only the specified keys, while transform_keys allows for key transformation via a block.

# Hash#slice example
h = { a: 1, b: 2, c: 3 }
h.slice(:a, :b) # => {:a=>1, :b=>2}

# Hash#transform_keys example
h.transform_keys { |k| k.to_s.upcase } # => {"A"=>1, "B"=>2, "C"=>3}

How does Ruby 2.5 improve performance?

String operations got a significant speed boost. String#upcase, downcase, swapcase, and capitalize are now up to 5x faster for ASCII strings and even faster for non-ASCII strings.

Mutexes have been made smaller and faster. This improves the performance of multi-threaded applications, making thread synchronization less costly.

ERB template generation is now twice as fast. This is a major win for web applications that heavily use embedded Ruby templates for views.

What new debugging tools are available?

The pp (pretty-print) method is now automatically available in IRB sessions. This makes inspecting complex objects much more convenient without requiring an explicit require.

You can now call binding.irb anywhere in your code to drop into an IRB session at that exact execution point. This is a game-changer for debugging as it works outside of just the main context.

def complex_method
  # ... some code
  binding.irb # drops into IRB here with full context
  # ... more code
end

What updates were made to standard libraries?

ERB received substantial updates including performance improvements and new features. The ERB version included is now closer to the standalone erubi gem.

BigDecimal is now part of the default gem bundle, making it more accessible for precision decimal arithmetic without extra installation steps.

RubyGems and RDoc were updated to their latest versions, bringing various improvements to gem management and documentation generation.

FAQ

How does top-level rescue work without a begin block?
You can now use rescue directly in method and class definitions. Instead of wrapping code in begin/end, you can write the method and place rescue at the end to handle exceptions.

When should I use yield_self?
Use yield_self for method chaining transformations where you want to pass an object through a series of operations. It's particularly useful for creating fluent interfaces and avoiding temporary variables.

Is the performance improvement for String operations noticeable?
Yes, especially for applications that process large amounts of text. The 5x speedup for ASCII operations and even greater improvements for Unicode can significantly reduce processing time in string-heavy applications.

Do I need to change my ERB templates for the performance boost?
No, the performance improvements are backward compatible. Your existing templates will automatically benefit from the faster ERB compilation without any code changes required.

How does binding.irb differ from byebug or pry?
While similar in concept, binding.irb is part of the standard library and doesn't require additional gems. It provides a lightweight way to debug anywhere in your code with IRB's familiar interface, making it great for quick debugging sessions.

Releases In Branch 2.5

VersionRelease date
2.5.905 Apr 2021
(5 years ago)
2.5.831 Mar 2020
(6 years ago)
2.5.701 Oct 2019
(6 years ago)
2.5.628 Aug 2019
(6 years ago)
2.5.515 Mar 2019
(7 years ago)
2.5.413 Mar 2019
(7 years ago)
2.5.318 Oct 2018
(7 years ago)
2.5.217 Oct 2018
(7 years ago)
2.5.128 Mar 2018
(8 years ago)
2.5.025 Dec 2017
(8 years ago)
2.5.0-rc114 Dec 2017
(8 years ago)
2.5.0-preview110 Oct 2017
(8 years ago)