mirror of
https://github.com/ruby/ruby.git
synced 2026-01-26 20:19:19 +00:00
4.6 KiB
4.6 KiB
NEWS for Ruby 3.3.0
This document is a list of user-visible feature changes since the 3.2.0 release, except for bug fixes.
Note that each entry is kept to a minimum, see links for details.
Language changes
Command line options
- A new
performancewarning category was introduced. They are not displayed by default even in verbose mode. Turn them on with-W:performanceorWarning[:performance] = true. [Feature #19538]
Core classes updates
Note: We're only listing outstanding class updates.
-
Array
Array#packnow raises ArgumentError for unknown directives. [Bug #19150]
-
Dir
Dir.for_fdadded for returning a Dir object for the directory specified by the provided directory file descriptor. [Feature #19347]Dir.fchdiradded for changing the directory to the directory specified by the provided directory file descriptor. [Feature #19347]Dir#chdiradded for changing the directory to the directory specified by the providedDirobject. [Feature #19347]
-
MatchData
- MatchData#named_captures now accepts optional
symbolize_nameskeyword. [Feature #19591]
- MatchData#named_captures now accepts optional
-
String
String#unpacknow raises ArgumentError for unknown directives. [Bug #19150]String#bytesplicenow accepts new arguments index/length or range of the source string to be copied. [Feature #19314]
-
ObjectSpace::WeakKeyMap
- New core class to build collections with weak references. The class use equality semantic to lookup keys like a regular hash, but it doesn't hold strong references on the keys. [Feature #18498]
-
Module
Module#set_temporary_nameadded for setting a temporary name for a module. [Feature #19521]
Stdlib updates
The following default gems are updated.
- RubyGems 3.5.0.dev
- bigdecimal 3.1.4
- bundler 2.5.0.dev
- csv 3.2.8
- fiddle 1.1.2
- fileutils 1.7.1
- irb 1.7.1
- nkf 0.1.3
- optparse 0.4.0.pre.1
- psych 5.1.0
- reline 0.3.6
- stringio 3.0.8
- strscan 3.0.7
- syntax_suggest 1.1.0
- time 0.2.2
- timeout 0.4.0
- uri 0.12.2
The following bundled gems are updated.
- minitest 5.18.1
- test-unit 3.6.1
- net-imap 0.3.6
- rbs 3.1.0
- typeprof 0.21.7
- debug 1.8.0
The following default gem is now bundled.
- racc 1.7.1
See GitHub releases like Logger or changelog for details of the default gems or bundled gems.
Supported platforms
Compatibility issues
Stdlib compatibility issues
raccis promoted bundled gems.- You need to add
raccto yourGemfileif you useraccunder bundler environment.
- You need to add
ext/readlineis retired- We have
relinethat is pure Ruby implementation compatible withext/readlineAPI. We rely onrelinein the future. If you need to useext/readline, you can installext/readlinevia rubygems.org withgem install readline-ext. - We no longer need to install libraries like
libreadlineorlibedit.
- We have
C API updates
Implementation improvements
defined?(@ivar)is optimized with Object Shapes.
YJIT
- Significant performance improvements over 3.2
- Splat and rest arguments support has been improved.
- Registers are allocated for stack operations of the virtual machine.
- More calls with optional arguments are compiled.
Integer#!=,String#!=,Kernel#block_given?,Kernel#is_a?,Kernel#instance_of?,Module#===are specially optimized.- Instance variables no longer exit to the interpreter with megamorphic Object Shapes.
- Metadata for compiled code uses a lot less memory.
- Improved code generation on ARM64
- Option to start YJIT in paused mode and then later enable it manually
--yjit-pauseandRubyVM::YJIT.resume- This can be used to enable YJIT only once your application is done booting
- Exit tracing option now supports sampling
--trace-exits-sample-rate=N
- The default value for
--yjit-exec-mem-sizeis changed from 64 to 128. - Multiple bug fixes
RJIT
- Introduced a pure-Ruby JIT compiler RJIT and replaced MJIT.
- RJIT supports only x86_64 architecture on Unix platforms.
- Unlike MJIT, it doesn't require a C compiler at runtime.
- RJIT exists only for experimental purposes.
- You should keep using YJIT in production.