ruby-changelog icon indicating copy to clipboard operation
ruby-changelog copied to clipboard

Ruby CHANGELOG

Ruby versions changelog

Intro

See full version of this project on https://rubychangelog.com/

This page was last updated on 2024-01-09 via rake readme task

Ruby changelog

Ruby 3.3

  • :lock: EOL 2027-03-31
  • Implementations: MRI 3.3.0
  • :gear: Introduced Prism parser as a default gem, replacing Ripper
  • :gear: Lrama replaces Bison as parser generator
  • :gear: Major YJIT performance improvements and introduction of RJIT, a pure-Ruby JIT compiler
  • :gear: Introduction of M:N thread scheduler for efficient thread management
  • :gear: Several performance improvements in the Garbage Collector
  • :gear: Enhancements in IRB including advanced irb:rdbg integration and pager support

Ruby 3.2

  • :lock: EOL 2026-03-31
  • Implementations: MRI 3.2.2
  • :gear: WASI based WebAssembly support
  • :gear: Production-ready YJIT
  • :gear: Regexp improvements against ReDoS
  • :gear: IRB improvements (SyntaxSuggest, ErrorHighlight)
  • :gear: Bundler 2.4 now uses PubGrub resolver instead of Molinillo

Ruby 3.1

  • :lock: EOL 2025-03-31
  • Implementations: MRI 3.1.4
  • :gear: YJIT: New experimental in-process JIT compiler :test_tube:
  • :new: debug gem: A new debugger
  • :new: error_highlight: Fine-grained error location in backtrace
  • :new: IRB Autocomplete and Documentation Display
  • :arrows_counterclockwise: Values in Hash literals and keyword arguments can be omitted.
  • :arrows_counterclockwise: Updates in RBS / TypeProf

Ruby 3.0

  • :lock: EOL 2024-03-31
  • Implementations: MRI 3.0.6
  • :gear: MJIT improvements
  • :new: Ractor - Actor-model like concurrent abstraction :test_tube:
  • :new: Fiber Scheduler for light-weight concurrency :test_tube:
  • :new: RBS - a language to describe the structure of Ruby classes
  • :new: TypeProf - type analysis tool, generates RBS type signatures :test_tube:
  • :new: Hash#except
  • :arrows_counterclockwise: Keyword arguments are separated from other arguments
  • :arrows_counterclockwise: Rightward assignment statement
  • :arrows_counterclockwise: Reversed (again) order of backtrace :test_tube:
  • :arrows_counterclockwise: Endless method definition def square(x) = x * x

Ruby 2.7

  • :lock: EOL 2023-03-31
  • Implementations: MRI 2.7.7
  • :new: Pattern Matching :test_tube:
  • :arrows_counterclockwise: REPL improvements
  • :arrows_counterclockwise: Separation of positional and keyword arguments
  • :arrows_counterclockwise: Argument forwarding
  • :gear: Compaction GC

Ruby 2.6

  • :lock: EOL 2022-04-13
  • Implementations: MRI 2.6.10
  • :new: endless ranges (1..)
  • :new: Enumerable#chain
  • :new: function composition operators <<, >> to Proc
  • :arrows_counterclockwise: #then alias for #yield_self
  • :gear: JIT compiler --jit
  • :gear: Bundler is installed as a default gem

Ruby 2.5

  • :lock: EOL 2021-04-06
  • Implementations: MRI 2.5.9, JRuby 9.2.0.0
  • :new: yield_self
  • :new: rescue in blocks
  • :new: Hash#slice and Hash#transform_keys
  • :new: ERB#result_with_hash
  • :arrows_counterclockwise: New Array aliases - #prepend (#unshift) and #append (#push)
  • :arrows_counterclockwise: Pattern argument on Enumerable methods
  • :arrows_counterclockwise: Keyword arguments on Struct.new
  • :arrows_counterclockwise: Removed Top-level constant lookup
  • :arrows_counterclockwise: Reverse order of backtrace (oldest call first) :test_tube:

Ruby 2.4

  • :lock: EOL 2020-04-01
  • Implementations: MRI 2.4.10
  • :new: Enumerable#sum
  • :new: Integer#digits
  • :new: Regexp#match?, Regexp#named_captures
  • :arrows_counterclockwise: New constructor Logger.new(STDOUT, level:, progname:)
  • :arrows_counterclockwise: Float: #round, #ceil, #floor, and #truncate now accept a precision
  • :wastebasket: Removed Fixnum and Bignum classes (unified to Integer)

Ruby 2.3

  • :lock: EOL 2019-03-31
  • Implementations: MRI 2.3.8, JRuby 9.1.17.0
  • :new: Safe navigation operator &.
  • :new: Frozen string literals
  • :new: Array#dig
  • :new: Hash#fetch_values, Hash#to_proc, Hash#dig
  • :new: 'Did you mean?'

Ruby 2.2

  • :lock: EOL 2018-03-31
  • :wastebasket: callcc is obsolete - use Fiber instead
  • :wastebasket: DL has been removed from stdlib - use Fiddle instead
  • :gear: Incremental GC - fixes performance for 'old' objects
  • :gear: The introduction of GC for symbols (mortal/immortal)

Ruby 2.1

  • :lock: EOL 2017-03-31
  • :new: Refinements
  • :new: Exception#cause - for libraries exceptions
  • :new: Rational and Complex literals
  • :new: Generational GC - young / old objects

Ruby 2.0

  • :lock: EOL 2016-02-24
  • :new: Keyword arguments
  • :new: Module#prepend
  • :new: Enumerator#lazy
  • :new: %i a literal for symbol array

Development

Documentation app

Documentation app is built using mkdocs with mkdocs-material theme.

To rebuild documentation pages from templates/docs/**:

$ rake doc
# Writing to mkdocs-material/docs/versions-latest.md .. Done
# Writing to docs/docs/versions-all.md .. Done
# ...

To start documentation app locally:

$ cd docs
$ mkdocs serve

Open http://localhost:8000/

Deployment

Deployment to github Pages is set up via github actions using mkdocs gh-deploy command.

Readme

To rebuild this README.md from templates/README.md.erb:

$ rake readme
# Writing to README.MD .. Done

$ yield
# =* Yield is serving your markdown at http://localhost:4000/

Open http://localhost:4000/

New Ruby version?

  1. Compare Ruby releases page with ruby_versions.json if there are new Ruby versions.
    • update ruby_versions.json with new versions details
  2. Update latest info about CVE - run rake fetch:cve
  3. Regenerate all artifacts - rake doc readme
  4. Verify - bundle exec yield and on mkdocs
  5. Commit & publish