ruby-changelog
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
<<, >>toProc - :arrows_counterclockwise:
#thenalias 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:
rescuein blocks - :new:
Hash#sliceandHash#transform_keys - :new:
ERB#result_with_hash - :arrows_counterclockwise: New
Arrayaliases -#prepend (#unshift)and#append (#push) - :arrows_counterclockwise: Pattern argument on
Enumerablemethods - :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#truncatenow accept a precision - :wastebasket: Removed
FixnumandBignumclasses (unified toInteger)
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:
callccis obsolete - use Fiber instead - :wastebasket:
DLhas 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:
RationalandComplexliterals - :new: Generational GC - young / old objects
Ruby 2.0
- :lock: EOL 2016-02-24
- :new: Keyword arguments
- :new:
Module#prepend - :new:
Enumerator#lazy - :new:
%ia 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?
- Compare Ruby releases page with ruby_versions.json if there are new Ruby versions.
- update ruby_versions.json with new versions details
- Update latest info about CVE - run
rake fetch:cve - Regenerate all artifacts -
rake doc readme - Verify -
bundle exec yieldand on mkdocs - Commit & publish