Releases: oracle/truffleruby
TruffleRuby 24.1.1
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
More information is available on the website: https://www.graalvm.org/ruby/
TruffleRuby comes in two standalone modes, native
and jvm
, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.
Changelog
- Build based on GraalVM for JDK 23.0.1 (24.1.1)
TruffleRuby 24.1.0
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
More information is available on the website: https://www.graalvm.org/ruby/
TruffleRuby comes in two standalone modes, native
and jvm
, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.
Changelog
New features:
- Update to Ruby 3.2.4 (@andrykonchin).
- Add
--reuse-precompiled-gems
option (@andrykonchin).
Bug fixes:
- Add missing thread-safe objects write barriers for
TruffleRuby::ConcurrentMap
(#3179, @eregon). - Fix repeated calling of methods
Dir#{each,each_child,children}
(#3464, @andrykonchin). - Fix
IO#{wait,wait_readable,wait_writable}
methods and switch the current thread into a sleep state (@andrykonchin). - Fix
rb_global_variable()
forFloat
and bignum values during theInit_
function (#3478, @eregon). - Fix
rb_gc_register_mark_object()
forFloat
and bignum values (#3502, @eregon, @andrykonchin). - Fix parsing literal floats when the locale does not use
.
for the decimal separator (e.g.LANG=fr_FR.UTF-8
) (#3512, @eregon). - Fix
IO#{read_nonblock,readpartial,sysread}
,BasicSocket#{recv,recv_nonblock}
,{Socket,UDPSocket}#recvfrom_nonblock
,UnixSocket#recvfrom
and preserve a provided buffer's encoding (#3506, @andrykonchin). - Repair
IO#{wait_readable,wait_writable,wait}
to be interruptible (#3504, @andrykonchin). - Fix Hash value omission for constant names (@andrykonchin).
- Fix
MatchData#[index, length]
when index is larger than number of matched values (@andrykonchin). - Fix
#each
for a foreign iterator which is also iterable (#3630, @eregon).
Compatibility:
- Move
IO#wait_readable
,IO#wait_writable
,IO#wait_priority
andIO#wait
into core library (@andrykonchin). - Change assignment evaluation order for fully qualified constant and evaluate left-hand-side before right-hand-side (#3039, @andrykonchin).
- Fix evaluation order for multi-assignment and evaluate left-hand-side before right-hand-side (@andrykonchin).
- Add
Regexp.linear_time?
method (#3039, @andrykonchin). - Allow null encoding pointer in
rb_enc_interned_str_cstr
(@thomasmarshall). - Allow anonymous memberless Struct (@simonlevasseur).
- Set
$!
when aKernel#at_exit
hook raises an exception (#3535, @andrykonchin). - Support
:buffer
keyword argument toArray#pack
(#3559, @andrykonchin). - Set
RbConfig::CONFIG['host_cpu']
toarm64
on darwin platform (#3571, @andrykonchin). - Fix
RegexpError
messages to match CRuby better (#3398, @andrykonchin). - Fix
Enumerable#reduce
to handle non-Symbol method name parameter (#2931, @andrykonchin). - Fix
RangeError
message to match CRuby forInteger#chr
called with invalid codepoint argument (#2795, @andrykonchin). - Joni has been updated from 2.1.44 to 2.2.1 (@andrykonchin).
- Fix
Hash#to_h
called with a block and pass key and value to the block as separate arguments (#3607, @andrykonchin). - Fix
StringIO#initialize
and preserve initial string's encoding when mode isw
so the initial string is truncated (#3599, @andrykonchin). - Fix
IO#{autoclose=,autoclose?}
and raiseIOError
when io is closed (@andrykonchin). - Fix
Thread#{thread_variable_get,thread_variable_set,thread_variable?,key?,[],[]=,fetch}
and convert a non-String/Symbol thread-local variable name to String using#to_str
(@andrykonchin). - Fix formatting in
Exception#full_message
whenRuntimeError
is not handled andhighlight
option is specified (@andrykonchin). - Fix
String#encode
and convert fallback values into String using#to_str
(@andrykonchin). - Fix
Kernel.warn
and don't callWarning#warn
if a specified category is disabled (@andrykonchin). - Fix
$!
global variable and make it fiber-local (@andrykonchin). - Fix
rb_set_errinfo
andrb_errinfo
and store an error separately from$!
(#2890, @andrykonchin). - Fix
rb_mutex_synchronize
to not wrap/unwrap result value (#3624, @andrykonchin). - Add
StringIO#set_encoding_by_bom
method (#3632, @andrykonchin). - Fix
Kernel#eval
to ignore shebang with non-Ruby interpreter (#3623, @andrykonchin). - Add
SyntaxError#path
(#3433, @wasabigeek). - Reuse the precompiled
sass-embedded
gem as-is on TruffleRuby (#3565, @ntkme).
Performance:
- Fix inline caching for Regexp creation from Strings (#3492, @andrykonchin, @eregon).
- Optimize
Integer#pow
method for small modulus values (#3544, @andrykonchin). - Avoid repeated copies from native to managed string when matching Regexps on a native string (#2193, @eregon).
- Report polymorphism for
Kernel#sprintf
(#3537, @nirvdrum). - Review all inline caches to appropriately use splitting to make the best use of these inline caches (@andrykonchin, @eregon).
Memory Footprint:
TruffleRuby 24.0.2
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
More information is available on the website: https://www.graalvm.org/ruby/
TruffleRuby comes in two standalone modes, native
and jvm
, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.
Changelog
- Build based on GraalVM for JDK 22.0.2 (24.0.2)
TruffleRuby 24.0.1
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
More information is available on the website: https://www.graalvm.org/ruby/
TruffleRuby comes in two standalone modes, native
and jvm
, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.
Changelog
Bug fixes:
Performance:
- Fix inline caching for Regexp creation from Strings (#3492, @andrykonchin, @eregon).
TruffleRuby 24.0.0
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
More information is available on the website: https://www.graalvm.org/ruby/
TruffleRuby comes in two standalone modes, native
and jvm
, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.
Changelog
New features:
- C/C++ extensions are now compiled using the system toolchain and executed natively instead of using GraalVM LLVM (Sulong). This leads to faster startup, no warmup, better compatibility, smaller distribution and faster installation for C/C++ extensions (#3118, @eregon).
- Full support for the Ruby 3.2 and Ruby 3.3 syntax by adopting the Prism parser, which is about twice as fast as the old parser (#3117, #3038, #3039, @andrykonchin, @eregon).
- Pattern matching is now fully supported (#3332, #2683, @eregon, @razetime).
Bug fixes:
- Fix
rb_enc_left_char_head()
so it is not alwaysArgumentError
(#3267, @eregon). - Fix
IO.copy_stream
with aTempfile
destination (#3280, @eregon). - Fix
Regexp.union
negotiating the wrong result encoding (#3287, @nirvdrum, @simonlevasseur). - Fix
Proc#parameters
and return all the numbered parameters lower than the used explicitly ones (@andrykonchin). - Fix some C API functions which were failing when called with Ruby values represented as Java primitives (#3352, @eregon).
- Fix
IO.select([io], nil, [io])
on macOS, it was hanging due to a bug in macOSpoll(2)
(#3346, @eregon, @andrykonchin). - Run context cleanup such as showing the output of tools when
SignalException
andInterrupt
escape (@eregon). - Handle a new variable inside the
case
target expression correctly (#3377, @eregon). - The arguments of
Thread.new(*args, &block)
need to be marked as shared between multiple threads (#3179, @eregon). - Fix
Range#bsearch
and raiseTypeError
when range boundaries are non-numeric and block not passed (@andrykonchin). - Fix using the
--cpusampler
profiler when there are custom unblock functions forrb_thread_call_without_gvl()
(#3013, @eregon). - Fix recursive raising
FrozenError
exception when redefined#inspect
modifies an object (#3388, @andrykonchin). - Fix
Integer#div
returning the wrong object type when the divisor is aRational
(@simonlevasseur, @nirvdrum). - Remove constant
Random::DEFAULT
(#3039, @patricklinpl)
Compatibility:
- Add
Exception#detailed_message
method (#3257, @andrykonchin). - Fix
rb_enc_vsprintf
and force String encoding instead of converting it (@andrykonchin). - Add
rb_gc_mark_movable
function (@andrykonchin). - Promote
File#path
andFile#to_path
toIO#path
andIO#to_path
and make IO#new accept an optionalpath:
keyword argument (#3039, @moste00) - Display "unhandled exception" as the message for
RuntimeError
instances with an empty message (#3255, @nirvdrum). - Set
RbConfig::CONFIG['configure_args']
for openssl and libyaml (#3170, #3303, @eregon). - Support
Socket.sockaddr_in(port, Socket::INADDR_ANY)
(#3361, @mtortonesi). - Implement the
Data
class from Ruby 3.2 (#3039, @moste00, @eregon). - Make
Coverage.start
andCoverage.result
accept parameters (#3149, @mtortonesi, @andrykonchin). - Implement
rb_check_funcall()
(@eregon). - Implement
MatchData#{byteoffset,deconstruct,deconstruct_keys}
from Ruby 3.2 (#3039, @rwstauner). - Add
Integer#ceildiv
method (#3039, @simonlevasseur, @nirvdrum). - Implement
Class#attached_object
method (#3039, @andrykonchin). - Fix
ENV#{clone,dup}
and raiseTypeError
(#3039, @andrykonchin). - Fix
Coverage.supported?
and raiseTypeError
if argument is not Symbol (#3039, @andrykonchin). - Accept options argument to
Regexp.{new,compile}
of String and warn for unknown types (#3039, @rwstauner). - Implement
Time#deconstruct_keys
from Ruby 3.2 (#3039, @rwstauner). - Do not autosplat a proc that accepts a single positional argument and keywords (#3039, @andrykonchin).
- Support passing anonymous * and ** parameters as method call arguments (#3039, @andrykonchin).
- Handle either positional or keywords arguments by default in
Struct.new
(#3039, @rwstauner). - Promote
Set
class to core library (#3039, @andrykonchin). - Support
connect_timeout
keyword argument toTCPSocket.{new,open}
(#3421, @manefz, @patricklinpl, @nirvdrum, @rwstauner). - Add
File.lutime
andPathname#lutime
methods (#3039, @andrykonchin). - Add a deprecation warning for
Encoding#replicate
(#3039, @patricklinpl, @manefz, @nirvdrum). - Change
UnboundMethod#{==,inspect}
to use the owner module rather than the origin (#3039, @rwstauner, @manefz, @patricklinpl) - Support
lambda
keyword argument inProc#parameters
(#3039, @thomasmarshall, @goyox86). - Limit maximum encoding set size by 256 (#3039, @thomasmarshall, @goyox86).
- Remove deprecated methods
Dir.exists?
,File.exists?
, andKernel#=~
(#3039, @patricklinpl, @nirvdrum). - Remove deprecated
FileTest.exists?
method (#3039, @andrykonchin). - Fix {Method,Proc}#parameters and return
*
,**
and&
names for anonymous parameters (@andrykonchin). - Remove deprecated
Fixnum
andBignum
constants (#3039, @andrykonchin). - Add
rb_enc_interned_str_cstr
function (#3408, @goyox86, @thomasmarshall). - Add
rb_str_to_interned_str
function (#3408, @thomasmarshall).
Performance:
- Change the
Hash
representation from traditional buckets to a "compact hash table" for improved locality, performance and memory footprint (#3172, @moste00). - Optimize calls with
ruby2_keywords
forwarding by deciding it per call site instead of per callee thanks to my fix in CRuby 3.2 (@eregon). - Optimize feature loading when require is called with an absolute path to a .rb file (@rwstauner).
- Avoid extra copies for Strings passed as
:string
arguments to a FFI call and used later for Regexp matching (#3293, @eregon).
TruffleRuby 23.1.2
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
More information is available on the website: https://www.graalvm.org/ruby/
TruffleRuby comes in two standalone modes, native and jvm, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.
Changelog
Bug fixes:
- Fix
rb_enc_left_char_head()
so it is not alwaysArgumentError
(#3267, @eregon). - Fix
IO.copy_stream
with aTempfile
destination (#3280, @eregon). - Fix
Regexp.union
negotiating the wrong result encoding (#3287, @nirvdrum, @simonlevasseur). - Fix segfault in JITed code, graal commit
* Fix segfault in Native mode with G1 (only applies to Oracle GraalVM & Linux), graal commit
Unfortunately this was not backported to 23.1.2, it will be fixed in the next release.
Compatibility:
TruffleRuby 23.1.1
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
More information is available on the website: https://www.graalvm.org/ruby/
TruffleRuby comes in two standalone modes, native and jvm, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.
Changelog
- Build based on latest GraalVM JDK release (23.1.1)
TruffleRuby 23.1.0
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
More information is available on the website: https://www.graalvm.org/ruby/
TruffleRuby comes in two standalone modes, native
and jvm
, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.
Changelog
New features:
- Updated to Ruby 3.2.2 (#3039, @eregon, @andrykonchin).
- TruffleRuby Native on Oracle GraalVM on Linux now uses the G1 garbage collector which is much faster (@eregon).
Bug fixes:
- Fix
Dir.glob
returning blank string entry with leading**/
in glob andbase:
argument (@rwstauner). - Fix class lookup after an object's class has been replaced by
IO#reopen
(@itarato, @nirvdrum, @eregon). - Fix
Marshal.load
and raiseArgumentError
when dump is broken and is too short (#3108, @andrykonchin). - Fix
super
method lookup for unbounded attached methods (#3131, @itarato). - Fix
Module#define_method(name, Method)
to respectmodule_function
visibility (#3181, @andrykonchin). - Fix stack overflow with
Kernel.require
andzeitwerk
(#3224, @eregon). - Reimplement
IO.select
withpoll(2)
to support file descriptors >= 1024 (#3201, @eregon).
Compatibility:
- Fix
Hash#shift
when Hash is empty but has initial default value or initial default proc (#3039, @itarato). - Make
Array#shuffle
produce the same results as CRuby (@rwstauner). - Add
Process.argv0
method (@andrykonchin). - Add support for array pattern matching. This is opt-in via
--pattern-matching
since pattern matching is not fully supported yet. (#2683, @razetime). - Fix
Array#[]
withArithmeticSequence
argument when step is negative (#3039, @itarato). - Fix
Range#size
and returnnil
for beginningless Range when end isn't Numeric (#3039, @rwstauner). - Alias
String#-@
toString#dedup
(#3039, @itarato). - Fix
Pathname#relative_path_from
to convert string arguments to Pathname objects (@rwstauner). - Add
String#bytesplice
(#3039, @itarato). - Add
String#byteindex
andString#byterindex
(#3039, @itarato). - Add implementations of
rb_proc_call_with_block
,rb_proc_call_kw
,rb_proc_call_with_block_kw
andrb_funcall_with_block_kw
(#3068, @andrykonchin). - Add optional
timeout
argument toThread::Queue#pop
(#3039, @itarato). - Add optional
timeout
argument toThread::SizedsQueue#pop
(#3039, @itarato). - Handle
long long
and aliases inFiddle
(#3128, @eregon). - Add
Module#refinements
(#3039, @itarato). - Add
Refinement#refined_class
(#3039, @itarato). - Add
rb_hash_new_capa
function (#3039, @itarato). - Fix
Encoding::Converter#primitive_convert
and raiseFrozenError
when a destination buffer argument is frozen (@andrykonchin). - Add
Module#undefined_instance_methods
(#3039, @itarato). - Add
Thread.each_caller_location
(#3039, @itarato). - Add
timeout
argument toThread::SizedQueue#push
(#3039, @itarato). - Add
rb_syserr_new
function (@rwstauner). - Add
Enumerator#product
(#3039, @itarato). - Add
Module#const_added
(#3039, @itarato). - Show the pointer size information (if available) in
FFI::Pointer#inspect
(@nirvdrum). - Implement performance warnings (
Warning[:performance]
) like in CRuby 3.3 (@eregon). - The output of
Marshal.dump
is now compatible with CRuby forRational
andComplex
instances (#3228, @eregon).
Performance:
- Improve
Truffle::FeatureLoader.loaded_feature_path
by removing expensive string ops from a loop. Speeds up feature lookup time (#3010, @itarato). - Improve
String#-@
performance by reducing unnecessary data copying and supporting substring lookups (@nirvdrum) - Specialize
Array#<<
and related methods appending elements per call site to have a single array storage strategy in the inline cache for most cases (@eregon).
Changes:
gu install $LANGUAGE
is replaced bytruffleruby-polyglot-get $LANGUAGE
, available in the TruffleRuby JVM standalone (@eregon).- The TruffleRuby
ScriptEngine
implementation is removed in favor of the generic ScriptEngine in GraalVM docs (@eregon).
Memory Footprint:
TruffleRuby - GraalVM Community 23.0.1
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
The Ruby language component can be added to GraalVM using the gu
utility.
More information is available on the website: https://www.graalvm.org/ruby/
Changelog
- Build based on latest GraalVM JDK release (23.0.1)
TruffleRuby - GraalVM Community 23.0.0
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
The Ruby language component can be added to GraalVM using the gu
utility.
More information is available on the website: https://www.graalvm.org/ruby/
Changelog
New features:
- Updated to Ruby 3.1.3 (#2733, @andrykonchin, @eregon).
foreign_object.is_a?(foreign_meta_object)
is now supported (@eregon).- Foreign big integers are now supported and work with all
Numeric
operators (@eregon).
Bug fixes:
- Ensure every parse node has a source section and fix the source section for
ensure
(#2758, @eregon). - Fix
spawn(..., fd => fd)
on macOS, it did not work due to a macOS bug (@eregon). - Fix
rb_gc_register_address()
/rb_global_variable()
to read the latest value (#2721, #2734, #2720, @eregon). - Synchronize concurrent writes to the same StringIO (@eregon).
- Fix
StringIO#write(str)
whenstr
is of an incompatible encoding and position < buffer size (#2770, @eregon). - Fix
rb_thread_fd_select()
to correctly initialize fdset copies and handle the timeout (@eregon). - Fix
TracePoint#inspect
when it's called outside of a callback (@andrykonchin). - Fix
Signal.trap
when signal argument is not supported (#2774, @andrykonchin). - Fix
Dir.mkdir
and convert permissions argument toInteger
(#2781, @andrykonchin). - Fix
String#dump
and use\u{xxxx}
notation (with curly brackets) for characters that don't fit in\uxxxx
(#2794, @andrykonchin). - Fix
Marshal.dump
when big Integer (that cannot be expressed with 4 bytes) is serialized (#2790, @andrykonchin). - Fix
Array#pack
and acceptNumeric
values whenFloat
is expected (#2815, @andrykonchin). - Fix
\P{}
matching in regular expressions (#2798, @andrykonchin). - Fix constants lookup when
BasicObject#instance_eval
method is called with a String (#2810, @andrykonchin). - Don't trigger the
method_added
event when changing a method's visibility or callingmodule_function
(@paracycle, @nirvdrum). - Fix
rb_time_timespec_new
function to not callTime.at
method directly (@andrykonchin). - Fix
StringIO#write
to transcode strings with encodings that don't match theStringIO
'sexternal_encoding
. (#2839, @flavorjones) - Fix processing of proc rest arguments located at the beginning if there are no actual arguments (#2921, @andrykonchin).
- Fix
Monitor#exit
to raiseThreadError
when monitor not owned by the current thread (#2922, @andrykonchin). - Fix
MatchData#[]
to support negativelength
argument (#2929, @andrykonchin). - Fix
IO
line reading calls when using a multi-byte delimiter (IO#{each,gets,readline,readlines,etc.}
) (#2961, @vinistock, @nirvdrum). - Fix the exception type raised when type coercion raises a
NoMethodError
(#2903, @paracycle, @nirvdrum). - Fix
Method
andProc
#parameters
method to return_
parameter name without synthetic suffix when there are multiple_
parameters (@paracycle). - Fixed errors in IRB when attempting to navigate beyond bounds in singleline mode (@rwstauner).
- Fix
Dir.glob
returning blank string entry with leading**/
in glob andbase:
argument (@rwstauner).
Compatibility:
- Fix
MatchData#[]
when passed unbounded Range (#2755, @andrykonchin). - Updated
rb_define_class
,rb_define_class_under
, andrb_define_class_id_under
to allow class names that aren't valid in Ruby (#2739, @nirvdrum). - Fixed
rb_gv_get
so that it no longer implicitly creates global variables (#2748, @nirvdrum). - Added implementations of
rb_gvar_val_getter
andrb_define_virtual_variable
(#2750, @nirvdrum). - Implement
rb_warning_category_enabled_p
to support thesyntax_tree
gem (#2764, @andrykonchin). - Fix desctructuring of a single block argument that implements
#to_ary
dynamically (#2719, @andrykonchin). - Fix
Kernel#Complex
and raise exception when an argument is formatted incorrectly (#2765, @andrykonchin). - Add
#public?
,#private?
and#protected?
methods forMethod
andUnboundMethod
classes (@andrykonchin). - Add optional argument to
Thread::Queue.new
(@andrykonchin). - Support a module as the second argument of
Kernel#load
(@andrykonchin). - Improve argument validation in
Struct#valies_at
- raiseIndexError
orRangeError
when arguments are out of range (#2773, @andrykonchin). - Fix
MatchData#values_at
and handling indices that are out of range (#2783, @andrykonchin). - Add support for
%-z
(UTC for unknown local time offset, RFC 3339) toTime#strftime
(@andrykonchin). - Add support for
UTC
andA
-Z
utc offset values, as well as+/-HH
,+/-HHMM
,+/-HHMMSS
(without:
) (@andrykonchin). - Treat time with
UTC
,Z
and-00:00
utc offset as UTC time (@andrykonchin). - Raise
FrozenError
whenTime#localtime
,Time#utc
andTime#gmtime
is called on a frozen time object (@andrykonchin). - Validate a microseconds argument used to create a time object (@andrykonchin).
- Support accessing
dmark
anddfree
fields forRData
(#2771, @eregon). - Implement
rb_enc_nth()
(#2771, @eregon). - Support
offset
keyword argument forString#unpack
andString#unpack1
(@andrykonchin). - Fix
Process.detach
and castpid
argument toInteger
(#2782, @andrykonchin). rb_to_id()
should create a staticID
, used by RMagick (@eregon).- Resolve the current user home even when
$HOME
is not set (#2784, @eregon) - Fix
IO#lineno=
and convert argument toInteger
more strictly (#2786, @andrykonchin). - Fix argument implicit convertion in
IO#pos=
andIO#seek
methods (#2787, @andrykonchin). - Warn about unknown directive passed to
Array#pack
in verbose mode (#2791, @andrykonchin). - Added constants
IO::SEEK_DATE
andIO::SEEK_HOLE
(#2792, @andrykonchin). - Fix
StringIO.new
to accept keyword arguments (#2793, @andrykonchin). Process#spawn
should call#to_io
on non-IO file descriptor objects (#2809, @jcouball).- Add constants
IO::SEEK_DATE
andIO::SEEK_HOLE
(#2792, @andrykonchin). - Add
Class#subclasses
method (#2733, @andrykonchin). - Implement
Coverage.running?
method (@andrykonchin). - Fix arguments implicit type conversion for
Enumerable#zip
andArray#zip
(#2788, @andrykonchin). - Fix
Array#unshift
to not depend onArray#[]=
and allow overriding#[]=
in a subclass (#2772, @andrykonchin). - Fix syntactic check for
void value expression
(#2821, @eregon). - Fix
Range#step
with no block and non-Numeric
values (#2824, @eregon). - Fix execution order of
END
blocks andat_exit
callbacks (#2818, @andrykonchin). - Fix
String#casecmp?
for empty strings of different encodings (#2826, @eregon). - Implement
Enumerable#compact
andEnumerator::Lazy#compact
(#2733, @andrykonchin). - Implement
Array#intersect?
(#2831, @nirvdrum). - Record the source location in the constant for the
module
/class
keywords (#2833, @eregon). - Fix
File.open
and supportflags
option (#2820, @andrykonchin). - Support writing to
RData.dfree
for native extensions (#2830, #2732, #2165, @eregon). - Fix
IO#write
and support multiple arguments with different encodings (#2829, @andrykonchin). - Fix
Array
methodsreject
,reject!
,inject
,map
,select
,each_index
and handle a case when array is modified by a passed block like CRuby does (#2822, andrykonchin, @eregon). - Fix
EncodingError
exception message when Symbol has invalid encoding (#2850, @andrykonchin). - Raise
EncodingError
at parse time when Hash literal contains a Symbol key with invalid encoding (#2848, @andrykonchin). - Fix
Array
methodsreject
,reject!
,inject
,map
,select
,each_index
and handle a case when array is modified by a passed block like CRuby does (#2822, @andrykonchin, @eregon). - Fix
Array
methodsselect!
andkeep_if
and handle a case when exception is raised in a passed block properly (@andrykonchin). - Fix
Enumerable
methodseach_cons
andeach_slice
to return receiver (#2733, @horakivo) Module
methods#private
,#public
,#protected
,#module_function
now returns their arguments like in CRuby 3.1 (#2733, @horakivo)Kernel#exit!
, killing Fibers and internal errors do not run code inensure
clauses anymore, the same as CRuby (@eregon).- Implement
UnboundMethod#original_name
(@paracycle, @nirvdrum). - Implement
Thread#native_thread_id
method (#2733, @horakivo). - Modify
Struct#{inspect,to_s}
to match MRI when the struct is nested inside of an anonymous class or module (@st0012, @nirvdrum). Fiber.current
andFiber#transfer
are available withoutrequire 'fiber'
like in CRuby 3.1 (#2733, @eregon).- Add
freeze
keyword argument toMarshal.load
(#2733, @andrykonchin). - Add
Integer.try_convert
(#2733, @moste00, @eregon). - Support optional
:in
keyword argument forTime.now
andTime.new
(#2733, @andrykonchin). - Add optional
Hash
argument toEnumerable#tally
(#2733, @andrykonchin). - Update
$LOAD_PATH.resolve_feature_path
to returnnil
instead of raisingLoadError
when feature isn't found (#2733, @andrykonchin). - Add
objspace/trace
file (#2733, @andrykonchin). - Add
Process._fork
(#2733, @horakivo). - Update to JCodings 1.0.58 and Joni 2.1.44 (@eregon).
- Add
MatchData#match
andMatchData#match_length
(#2733, @horakivo). - Add
StructClass#keyword_init?
method (#2377, @moste00). - Support optional
level
argument forFile.dirname
method (#2733, @moste00). - Add
Thread::Backtrace.limit
method (#2733, @andrykonchin). - Deprecate
rb_gc_force_recycle
and make it a no-op function (#2733, @moste00). - Add
Refinement#import_methods
method and add deprecation warning forRefinement#include
andRefinement#prepend
(#2733, @horakivo). - Upgrading
UNICODE
version to 13.0.0 andEMOJI
version to 13.1 (#2733, @horakivo). - Add
rb_io_maybe_wait_readable
, `...