Skip to content

kowal/ruby-changelog

Repository files navigation

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

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

Ruby 3.2

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

Ruby 3.1

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

Ruby 3.0

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

Ruby 2.7

  • 🔒 EOL 2023-03-31
  • Implementations: MRI 2.7.7
  • 🆕 Pattern Matching 🧪
  • 🔄 REPL improvements
  • 🔄 Separation of positional and keyword arguments
  • 🔄 Argument forwarding
  • ⚙️ Compaction GC

Ruby 2.6

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

Ruby 2.5

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

Ruby 2.4

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

Ruby 2.3

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

Ruby 2.2

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

Ruby 2.1

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

Ruby 2.0

  • 🔒 EOL 2016-02-24
  • 🆕 Keyword arguments
  • 🆕 Module#prepend
  • 🆕 Enumerator#lazy
  • 🆕 %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