2.5.9

Latest release in branch 2.5
Released 5 years ago (April 05, 2021)

Software Ruby
Branch 2.5
End of bug fixes April 01, 2020
End of life April 05, 2021
First official release version 2.5.0
First official release date 8 years ago (December 25, 2017)
Release notes https://ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/
Source code https://github.com/ruby/ruby/tree/v2_5_9
Documentation https://ruby-doc.org
Download https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.9.tar.gz
Ruby 2.5 Releases View 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

Version Release date
2.5.9 5 years ago
(April 05, 2021)
2.5.8 6 years ago
(March 31, 2020)
2.5.7 6 years ago
(October 01, 2019)
2.5.6 6 years ago
(August 28, 2019)
2.5.5 7 years ago
(March 15, 2019)
2.5.4 7 years ago
(March 13, 2019)
2.5.3 7 years ago
(October 18, 2018)
2.5.2 7 years ago
(October 17, 2018)
2.5.1 8 years ago
(March 28, 2018)
2.5.0 8 years ago
(December 25, 2017)
2.5.0-rc1 8 years ago
(December 14, 2017)
2.5.0-preview1 8 years ago
(October 10, 2017)